Python msqldb查询不区分大小写
嗨,我正在尝试通过python检查mysql表中是否已经有一个条目。我用来检查它们是否已经是一个条目的键称为PID,它使用ascii_bin排序规则。我的问题是当我尝试像Python msqldb查询不区分大小写,python,mysql,case-sensitive,Python,Mysql,Case Sensitive,嗨,我正在尝试通过python检查mysql表中是否已经有一个条目。我用来检查它们是否已经是一个条目的键称为PID,它使用ascii_bin排序规则。我的问题是当我尝试像 q = """select * from table_name where PID = '%s'"""%("Hello") db = MySQLdb.connect("xxxx", "xxxx", "xxxx","temp",cursorclass=MySQLdb.cursors.DictCursor) cursor = db
q = """select * from table_name where PID = '%s'"""%("Hello")
db = MySQLdb.connect("xxxx", "xxxx", "xxxx","temp",cursorclass=MySQLdb.cursors.DictCursor)
cursor = db.cursor()
res = cursor.execute(q)
rowOne = cursor.fetchone() #fetches the row where pid = "hello"
rowOne最终成为pid=hello的行。但是,当我使用sqlyog并执行查询时,它会正确地打印出一行,其中pid=hello正确地充当区分大小写的查询。我正在寻找一种方法使mysqldb模块正常工作,因为我的很多代码已经在使用这个模块了默认情况下,MySQL中的字符串比较操作不区分大小写或重音: 不过,您有两个简单的选项,请使用COLLATE: 例如,如果要比较同时具有拉丁1字符集的列和字符串,可以使用COLLATE运算符使任一操作数具有拉丁1_general_cs或拉丁1_bin排序规则: 或将列设置为区分大小写: 如果希望列始终以区分大小写的方式处理,请使用区分大小写或二进制排序规则声明它。见第13.1.10节“创建表语法”
默认情况下,它不区分大小写。如果需要区分大小写的select,请使用二进制比较:@alecxe在我的问题中,我已经提到我的排序规则是ascii_-bin,我的select是区分大小写的。我只在mysql中使用它,但当我通过mysqldb尝试它时,它不起作用。问题纯粹是python,如果您使用collate-latin2\u-bin在搜索词的查询中强制使用python,它是否有效?同意这一点在重读时似乎有点奇怪。您是否尝试过记录mysqldb实际发送给MySQL的内容?对不起,我不知道这还会是什么。我也不知道mysqldb模块怎么可能会导致这个问题。只是想澄清一下,您已将代码更改为:q=select*from table_name,其中PID COLLATE latin1_bin='%s'%Hello,但仍然存在此错误?我唯一能想到尝试的另一件事是此q=select*与table_name(其中PID='%s'COLLATE latin1_bin%Hello)的不同排列,其中PID='%s'COLLATE latin1_bin'%Hello或表两侧的其他区分大小写的字符集变量:对照utf8\u bin或utf8\u general\u cs。MySQL是否接收到您期望的每个查询?是否可以将整个表设置为区分大小写的字符集进行搜索将表更改为:DEFAULT CHARSET=utf8 COLLATE utf8\u general\u cs?如果这些都不起作用,我会给你一笔赏金——我现在很好奇。