Python 2.7中SQLite3的LIKE查询如何设置为区分大小写?
让SQLite的LIKE查询区分大小写(Python 2.7)
我之前也碰到过这个问题,SQLite的LIKE默认行为确实容易让人困惑——在Python 2.7的sqlite3模块里,它默认对ASCII字母不区分大小写。不过有几种方法可以让LIKE查询变成区分大小写的,给你列出来:
方法1:查询时使用BINARY操作符
直接在查询中用BINARY修饰列或者匹配值,强制按字节进行比较,这样就能区分大小写了。比如:
import sqlite3 conn = sqlite3.connect('test.db') cursor = conn.cursor() # 示例查询:只匹配包含"Test"(首字母大写)的记录 cursor.execute("SELECT * FROM my_table WHERE BINARY name LIKE ?", ('%Test%',)) results = cursor.fetchall() conn.close()
你也可以把BINARY放在匹配值前面,效果是一样的:
SELECT * FROM my_table WHERE name LIKE BINARY '%Test%';
方法2:创建表时指定列的排序规则为BINARY
如果希望某一列的所有LIKE查询都默认区分大小写,可以在创建表的时候给TEXT列指定COLLATE BINARY排序规则:
cursor.execute(""" CREATE TABLE my_table ( id INTEGER PRIMARY KEY, name TEXT COLLATE BINARY ) """)
这样之后对name列的LIKE查询就会自动区分大小写,不需要每次都加BINARY修饰。
方法3:查询时指定COLLATE BINARY
如果表已经存在,不想修改表结构,也可以在查询末尾加上COLLATE BINARY来强制区分大小写:
SELECT * FROM my_table WHERE name LIKE '%Test%' COLLATE BINARY;
补充说明
SQLite默认的LIKE行为是把ASCII的大小写字母(A-Z和a-z)视为相等,这是它的设计特性。而BINARY排序规则会严格按照字符的字节值进行比较,所以能实现大小写区分的效果。
内容的提问来源于stack exchange,提问作者rth
相关产品推荐
相关产品推荐

