注册
关于大小写敏感的处理
技术分享/ 文章详情 /

关于大小写敏感的处理

tdj305 2022/12/01 2336 4 0
关于数据库的大小写敏感,很多人都容易造成误解,导致有的时候建库后需要重新初始化一个新库来处理此问题。

大小写敏感分为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 。

jdbcdriver.zip

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服