Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您希望mysql如何区分大小写?_Mysql_Sql_Case Sensitive_Sql Like - Fatal编程技术网

您希望mysql如何区分大小写?

您希望mysql如何区分大小写?,mysql,sql,case-sensitive,sql-like,Mysql,Sql,Case Sensitive,Sql Like,可能重复: Mysql忽略了类似的比较 如何强制它执行区分大小写的类似比较?使用类似二进制的: mysql> SELECT 'abc' LIKE 'ABC'; -> 1 mysql> SELECT 'abc' LIKE BINARY 'ABC'; -> 0 另一种选择是使用校对 SELECT * FROM table1 WHERE columnName like 'a%' COLLATE utf8_bin; 我不会否决或结束投票,因为我实际上找不

可能重复:

Mysql忽略了类似的比较


如何强制它执行区分大小写的类似比较?

使用类似二进制的

mysql> SELECT 'abc' LIKE 'ABC';
    -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
    -> 0

另一种选择是使用
校对

SELECT *
FROM table1
WHERE columnName like 'a%' COLLATE utf8_bin;

我不会否决或结束投票,因为我实际上找不到任何值得这些投票的东西。不过,我同意安迪的观点,只要在网上搜索一下,就可以更快地找到答案。我会称之为“懒惰”,但61.3k代表并没有说懒惰。可能溢出-holic@JamesWebster好的,快点。我想戴上“回答你自己的问题”的帽子。跛脚的,是的,如此神圣。如果它在几分钟内没有赢得投票,我将关闭它:)即使如此,我认为问题已经解决了merit@AndyRay五年后,使用谷歌首先给出了这个答案:)嗯,这不是一个重复的链接问题。链接的问题标题不好,但有人试图获得一个类似于不区分大小写的问题,并且由于
CONCAT\u WS
.Nice的行为而遇到问题。这为使用自定义排序规则进行自定义匹配提供了机会(虽然完全不可移植,但如果你需要它,它仍然不起作用。结果是这样的insensitive@Nick它对我起作用。
其中像“%ElasticSearch%”这样的提示COLLATE utf8\u bin
返回的是
ElasticSearch
,但不是
ElasticSearch
S
的大小写不同)。在默认字符集不是utf8的服务器上,这将被破坏。此外,utf8mb4现在是首选字符集。我建议将代码更改为:
like convert('a%”,使用utf8mb4)整理utf8mb4_bin
无论服务器的默认字符集或会话的当前字符集如何,此操作都有效。或者,您可以显式设置会话的字符集。@Weltkind为什么更好?(不是说我同意或不同意,只是好奇您为什么这么说)@Kip最好是IMHO,因为它不预先假定任何字符集,也不使用任何排序规则。它只是简单的“精确匹配”,每个人都能理解。它还更容易记住(只需记住一个关键字:
BINARY
)和更简单的代码(您不必记住有效的字符集名称,如
utf8\u bin
)有点离题,但如果您正在学习SQL注入(特别是基于盲的注入攻击)那么,我想这是执行区分大小写比较的唯一方法;由于存在双引号,像COLLATE这样的东西会打乱查询。@Bohemian不幸的是,代码可能更简单,但如果您有重音符号,并且列字符集与当前会话字符集不同,则代码将不正确(通常为服务器默认值)例如,如果您有一个字符集为
latin1
的列,并且您的默认服务器字符集为
utf8mb4
,则
从表中选择*,其中类似Col的二进制'über'
将无法将
表中的行与
Col
值为
'über'
的行匹配,因为latin1中的ü是
0xFC
与utf8mb4中一样,它是
0xC3Bc
。如果要获得正确性,需要使用字符串比较和二进制排序规则。