有人能告诉我,如果MySQL SELECT查询是大小写敏感或大小写不敏感默认?如果不是,我要发送什么查询,这样我就可以做一些事情:

SELECT * FROM `table` WHERE `Value` = "iaresavage"

实际上,价值的真正价值是IAreSavage。


当前回答

使用二进制

这是一个简单的选择

SELECT * FROM myTable WHERE 'something' = 'something'

= 1

这是一个二进制选择

SELECT * FROM myTable WHERE BINARY 'something' = 'something'

or

SELECT * FROM myTable WHERE 'something' = BINARY '

= 0

其他回答

WHERE短语中的字符串比较不区分大小写。你可以试着比较使用

WHERE `colname` = 'keyword'

or

WHERE `colname` = 'KeyWord'

你会得到同样的结果。这是MySQL的默认行为。

如果你想让比较区分大小写,你可以添加COLLATE,就像这样:

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

SQL会给出不同的结果: WHERE colname COLLATE latin1_general_cs = '关键字'

Latin1_general_cs是大多数数据库中常见或默认的排序规则。

使用二进制

这是一个简单的选择

SELECT * FROM myTable WHERE 'something' = 'something'

= 1

这是一个二进制选择

SELECT * FROM myTable WHERE BINARY 'something' = 'something'

or

SELECT * FROM myTable WHERE 'something' = BINARY '

= 0

带有二进制标志设置的字符串字段将始终区分大小写。 如果你需要对非二进制文本字段进行区分大小写的搜索,请使用以下方法: SELECT 'test' REGEXP二进制'test'作为结果;

还要注意,在Linux上表名是区分大小写的,除非您将lower_case_table_name config指令设置为1。这是因为在Linux中表是由区分大小写的文件表示的。

尤其要注意在不区分大小写的Windows上开发,并将其部署到生产环境中。例如:

"SELECT * from mytable" 

除非设置了上面提到的指令,否则myTable在Windows中会成功,但在Linux中会失败。

参考资料:http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Marc B的回答基本正确。

如果您使用的是非二进制字符串(CHAR, VARCHAR, TEXT),根据默认排序规则,比较是不区分大小写的。

如果您正在使用二进制字符串(binary, VARBINARY, BLOB),比较是区分大小写的,因此您需要使用LOWER,如其他答案中所述。

如果不使用默认排序规则,而使用非二进制字符串,则大小写敏感性由所选的排序规则决定。

来源:https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html。仔细地阅读。还有一些人误解了这一点,认为比较必须区分大小写或不敏感。事实并非如此。