对于utf8_bin场MYSQL区分大小写的搜索
-
05-09-2019 - |
题
我创建了一个表,并设置核对为 UTF8 强>为了能够唯一索引添加到域。现在我需要做的不区分大小写的搜索,但是当我进行一些查询与整理关键字,我得到了:
mysql> select * from page where pageTitle="Something" Collate utf8_general_ci;
ERROR 1253(42000):整理 'utf8_general_ci' 是无效的 字符集 'LATIN1'
mysql> select * from page where pageTitle="Something" Collate latin1_general_ci;
错误1267(HY000):归类(utf8_bin,IMPLICIT)和非法混合 (latin1_general_ci,显式)操作 '='
我是很新的SQL,所以我在想,如果有人可以帮助。
解决方案
MySQL中的串具有字符集与核对一>。 UTF8是字符集,并utf8_bin是它的排序规则之一。为了您的字符串字面比较的UTF8列,将其转换为UTF8通过与_CHARSET符号前缀是:
_utf8 'Something'
现在的归类是仅适用于某些字符集。的区分敏感排序规则UTF8似乎utf8_bin,其中可以指定这样的:
_utf8 'Something' collate utf8_bin
使用这些转换,查询应该工作:
select * from page where pageTitle = _utf8 'Something' collate utf8_bin
在_CHARSET前缀可与字符串文字。要更改字符集场,有转换...使用。当你想将PAGETITLE字段转换到另一个字符集,如这是有用的:
select * from page
where convert(pageTitle using latin1) collate latin1_general_cs = 'Something'
要看到名为在名为“TAB”,尝试表“COL”列中的字符和归类:
select distinct collation(col), charset(col) from TAB
的所有字符集和归类的列表可以用为:
show character set
show collation
和用于UTF8所有有效排序规则可与找到:
show collation where charset = 'utf8'
其他提示
同时请注意,在使用“自动分页utf8_general_ci”或“自动分页latin1_general_ci”的情况下,即“合力”自动分页 - 这样的变换将防止从已有的索引的用法!这可能是出于性能在未来的一个瓶颈。
试试这个,它为我工作
SELECT * FROM users
WHERE UPPER(name
)= UPPER( '何')COLLATE utf8_bin;
请问,为什么你有一个需要明确地更改排序规则,当你做一个选择?为什么不直接的方式整理你要检索的记录进行排序时?
你与你的搜索是区分大小写遇到的问题是,你有一个二进制排序规则。尝试,而不是使用一般的排序规则。有关案件的敏感性和归类的更多信息,请看这里: 大小写敏感性在字符串搜索