SQLite字符串比较时的大小写问题解决方法

大部分数据库在进行字符串比较的时候,对大小写是不敏感的。但是,最近使用SQLite的时候,却发现它的情况恰好相反。

假设表User的结构和值如下:

  UserName
1 User1

执行下面的SQL语句:

代码如下:

SELECT * FROM [User] WHERE UserName = 'user1'

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

由于SQLite是近年来才兴起的数据库,中文资料少得很。Google了一些英文资料,终于找到了三种解决方案:

方案一:使用大小写转换函数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 );

如果在任何情况下都不需要对大小写敏感,方案三是最好的解决方案;如果只是少量查询对大小写不敏感,可以用方案二。而方案一由于用到了函数,可能有额外的性能损失,不推荐使用。

(0)

相关推荐

  • SQLite字符串比较时的大小写问题解决方法

    大部分数据库在进行字符串比较的时候,对大小写是不敏感的.但是,最近使用SQLite的时候,却发现它的情况恰好相反. 假设表User的结构和值如下:   UserName 1 User1 执行下面的SQL语句: 复制代码 代码如下: SELECT * FROM [User] WHERE UserName = 'user1' 结果是没有找到任何记录.明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的.这会对应用程序造成不良的影响.比如,用户在输入用户名的时候必须严格按照大小写输入,这是

  • json_decode 索引为数字时自动排序问题解决方法

    json_encode 索引为数字,自动排序问题 使用son_encode 给前端返回数据,结果顺序不对,经debug调试,发现是json_encode 函数的问题: { "code": 0, "msg": "请求成功!", "data": { "2018-10": { "17": [ { "id": 730, "uid": "11820

  • zend framework框架中url大小写问题解决方法

    有用过Zend Framework框架开发过项目的网友都知道 Zend Framework (ZF) MVC中的Controller和Action名称默认是不支持大小写的,这对于已经习惯了驼峰式代码风格的开发人员来说,显然是难以接受的.还好可以设定前端控制器FrontController的useCaseSensitiveActions参数来让Zend Framework支持大小写的Controller与Action命名,代码如下: 复制代码 代码如下: $front = Zend_Control

  • JAVA POST与GET数据传递时中文乱码问题解决方法

    做了N年的java开发从没有自己写过一个网站,最近乱忙活弄了一个企业家宣传网站. 跟大家一样遇到了中文字符集乱码问题,为了大家能少走一些弯路,所以在此分享一下即简单又实用的解决方法. 1. POST 数据传递 接收页 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.setCharacterEnco

  • 导入extjs、jquery 文件时$使用冲突问题解决方法

    1.在最近做项目时,在html页面中,没有导入jquery文件时,可以正常保存,而导入jquery文件后,则不能不存了 经过调试后,发现导入的jquery文件和现有的extjs文件冲突了(原因是$符号的冲突) jQuery与ExtJS之间发生冲突,但是在非IE内核下是可以的,是由于$符号的冲突,解决办法就是把jQuery的$符号用其他来代替,代码如下: 复制代码 代码如下: <script type="text/javascript" src="js/jquery.js

  • php post大量数据时发现数据丢失问题解决方法

    解决办法: 在php.ini中将max_input_vars调大改为5000就可以了 原因追查: from的enctype="multipart/form-data" php版本5.6.6 问题:部分POST数据接收不到 追源代码发现是php中max_input_vars配置造成的: 相关函数为rfc1867_post_handler,如果超过长度,则不会调用safe_php_register_variable来进行变量注册 相关堆栈如下 复制代码 代码如下: #0  rfc1867_

  • Python解析json时提示“string indices must be integers”问题解决方法

    本文实例讲述了Python解析json时提示"string indices must be integers"问题解决方法.分享给大家供大家参考,具体如下: import json,但是出现了一个奇怪的问题: string indices must be integers 这个错误告诉我,[ ]里面应该是数字而不是字符串,但是dict使用key访问也可以,这种错误感觉解析出来的结果像是一个list. 所以考虑是字符串解析的问题.打印解析的结果,是一长串的字符串,一堆的key挤在一起,v

  • Python3字符串的常用操作方法之修改方法与大小写字母转化

    目录 一·字符串中的修改方法 二·大小字母转化(这里同样也是临时变化) 一·字符串中的修改方法 1·replace():将某字符串内的指定的旧字符替换成新的字符(这里是临时替换,就是说替换时只是利用原字符串来形成了一个新的替换过后的字符串,但是原字符串并没有发生改变) 语法:字符串序列.replace(旧字符,新字符,替换次数),这里的替换次数是指将旧字符替换成新字符的个数,没有指定就会将全部的旧字符替换成新字符. 代码演示: str2 = "之久天意为征西,复位林秀之故也,久" pr

  • mysql 登录时闪退的问题解决方法

    mysql 登录时闪退的问题解决方法 之前mysql用着好着,可是今天在启动mysql后输入密码出现了闪退,在任务管理器中发现mysql服务没有启动,当手动启动时提示拒绝访问.在网上查找原因发现问题所在. 问题原因:mysql服务没有安装. 解决办法: 在cmd操作下找到mysql的安装目录(注意要用管理员身份运行cmd) 在 mysql bin目录下 以管理员的权限 执行 mysqld -install命令 然后仍然以管理员的权限 net start mysql 开启Mysql服务了. 输入m

  • Python 存储字符串时节省空间的方法

    从 Python 3 开始,str 类型代表着 Unicode 字符串.取决于编码的类型,一个 Unicode 字符可能会占 4 个字节,这个有些时候有点浪费内存. 出于内存占用以及性能方面的考虑,Python 内部采用下面 3 种方式来存储 Unicode 字符: 一个字符占一个字节(Latin-1 编码) 一个字符占二个字节(UCS-2 编码) 一个字符占四个字节(UCS-4 编码) 使用 Python 进行开发的时候,我们会觉得字符串的处理都很类似,很多时候根本不需要注意这些差别.可是,当

随机推荐