现在的位置: 首页 > 综合 > 正文

SQLite字符串比较中的大小写问题

2013年10月13日 ⁄ 综合 ⁄ 共 578字 ⁄ 字号 评论关闭

独立博客链接地址:http://zhuyanfeng.com/archives/529

大部分数据库在进行字符串比较时,对大小写是不敏感的。但是SQLite却是大小写敏感的。假设User的表结构和值如下:


执行下面的SQL语句:

SELECT * FROM User WHERE UserName = 'user1';

结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写敏感。有时这会对应用程序造成不良的影响。比如,用户在输入用户名的时候必须严格按照大小写输入,这是一种很不好的用户体验;用户表中可能同时存在user和USE
两个用户,容易混淆。如果想让SQLite忽略大小写,方法如下:

方法一:使用大小写转换函数LOWER、UPPER

SELECT * FROM User WHERE LOWER(UserName) = 'user1';

方法二:在进行比较时强制声明不区分大小写

SELECT * FROM User WHERE UserName = 'user1' COLLATE NOCASE;

方法三:创建表时声明该列不区分大小写

CREATE TABLE User (UserName NVARCHAR(20) COLLATE NOCASE);

如果在任何情况下都不需要对大小写敏感,就使用方法三;如果只是少量查询对大小写不敏感,可以用方法二。而方法一用到了函数,可能会影响查询速度,尽量不用。

抱歉!评论已关闭.