关于数据库的大小写敏感,很多人都容易造成误解,导致有的时候建库后需要重新初始化一个新库来处理此问题。
大小写敏感分为2块,一是结果集大小写敏感,比如表中有一列col1中存的是’aBc’,查询条件where col1=‘abc’,如果是大小写不敏感的库,这个检索是有结果的;如果是大小写敏感的库,这个检索结果就是空的。
二是对应用开发来说,主要是表名列名大小写是否敏感的。如果之前使用的是Oracle数据库,默认是大小写敏感的,但是表名列名是大小写不敏感的;如果是MySQL,默认是大小写不敏感的,包括结果集和列名表名都是如此。特别是应用使用框架封装JDBC,经常会遇到“标识符无效”这类错误。
达梦数据库的大小写敏感是结果集和表名列名统一的,如果是大小写敏感的库,表名、列名、结果集都是敏感的,反之都是不敏感的。下面对比Oracle和DM8在应用代码处理时的策略:
Oracle 12.1.0.1.0 JDBC 4.0
建表字段 | 应用代码 | 处理策略 |
---|---|---|
A | a | 执行成功 |
a | a | ORA-00904: “A”: 标识符无效 |
A | A | 执行成功 |
Oracle 12.2.0.1.0 JDBC 4.2
建表字段 | 应用代码 | 处理策略 |
---|---|---|
A | a | 调用中的无效参数 |
a | a | 调用中的无效参数 |
A | A | 执行成功 |
DM8中的处理策略:
建表字段 | 应用代码 | 处理策略 |
---|---|---|
A | a | genKeyNameCase=none,保持原样发给服务器;genKeyNameCase=lower,jdbc将a转成a发给服务器;genKeyNameCase=upper,jdbc将a转成A发给服务器 |
a | a | genKeyNameCase=none,保持原样发给服务器;genKeyNameCase=lower,jdbc将a转成a发给服务器;genKeyNameCase=upper,jdbc将a转成A发给服务器 |
A | A | genKeyNameCase=none,保持原样发给服务器;genKeyNameCase=lower,jdbc将a转成a发给服务器;genKeyNameCase=upper,jdbc将a转成A发给服务器 |
这样不论是大小写敏感的库还是大小写不敏感的库,在jdbc驱动层做了处理,灵活方便。 | ||
附件的JDBC是最新的jdbc,大家在使用达梦数据库遇到“标识符无效”之类的错误,可以使用附件中的jdbc,DmJdbcDriver18对应的jdk1.8,DmJdbcDriver17对应的是jdk1.7,DmJdbcDriver16对应的是jdk1.6 。 |
文章
阅读量
获赞