一尘不染

MYSQL区分大小写搜索utf8_bin字段

mysql

我创建了一个表并将排序规则设置为 utf8
,以便能够向字段添加唯一索引。现在我需要进行不区分大小写的搜索,但是当我使用collat​​e关键字执行一些查询时,我得到了:

mysql> select * from page where pageTitle="Something" Collate utf8_general_ci;

错误1253(42000):COLLATION’utf8_general_ci’对字符集’latin1’无效

mysql> select * from page where pageTitle="Something" Collate latin1_general_ci;

错误1267(HY000):操作’=’的排序规则(utf8_bin,IMPLICIT)和(latin1_general_ci,EXPLICIT)的非法混合

我对SQL非常陌生,所以我想知道是否有人可以提供帮助。


阅读 462

收藏
2020-05-17

共1个答案

一尘不染

MySQL中的字符串具有字符集和排序规则。utf8是字符集,而utf8_bin是其归类之一。要将字符串文字与utf8列进行比较,请使用_charset表示法将其前缀转换为utf8:

_utf8 'Something'

现在,排序规则仅对某些字符集有效。该区分 大小写 的UTF8归类似乎是utf8_bin,您可以指定,如:

_utf8 'Something' collate utf8_bin

通过这些转换,查询应该可以工作:

select * from page where pageTitle = _utf8 'Something' collate utf8_bin

_charset前缀适用于字符串文字。要更改字段的字符集,可以使用CONVERT …
USING。当您想将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'
2020-05-17