18 mysql sql case-sensitive character-encoding mysql-error-1267
我创建了一个表并将排序规则设置为utf8,以便能够为字段添加唯一索引.现在我需要进行不区分大小写的搜索,但是当我使用collate关键字执行一些查询时,我得到了:
mysql> select * from page where pageTitle="Something" Collate utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)
ERROR 1253(42000):COLLATION'utf8_general_ci'对CHARACTER SET'latin1'无效
mysql> select * from page where pageTitle="Something" Collate latin1_general_ci;
Run Code Online (Sandbox Code Playgroud)
ERROR 1267(HY000):操作'='的非法混合排序(utf8_bin,IMPLICIT)和(latin1_general_ci,EXPLICIT)
我对SQL很新,所以我想知道是否有人可以提供帮助.
And*_*mar 40
MySQL中的字符串具有字符集和排序规则.Utf8是字符集,utf8_bin是其排序规则之一.要将字符串文字与utf8列进行比较,请将其转换为utf8,方法是在其前面添加_charset表示法:
_utf8 'Something'
Run Code Online (Sandbox Code Playgroud)
现在,排序规则仅对某些字符集有效.该区分大小写的UTF8归类似乎utf8_bin,您可以指定,如:
_utf8 'Something' collate utf8_bin
Run Code Online (Sandbox Code Playgroud)
通过这些转换,查询应该有效:
select * from page where pageTitle = _utf8 'Something' collate utf8_bin
Run Code Online (Sandbox Code Playgroud)
_charset前缀适用于字符串文字.要更改字段的字符集,请使用CONVERT ... USING.当您想将pageTitle字段转换为另一个字符集时,这非常有用,如:
select * from page
where convert(pageTitle using latin1) collate latin1_general_cs = 'Something'
Run Code Online (Sandbox Code Playgroud)
要在名为"TAB"的表中查看名为"col"的列的字符和排序规则,请尝试:
select distinct collation(col), charset(col) from TAB
Run Code Online (Sandbox Code Playgroud)
可以在以下位置找到所有字符集和排序规则的列表:
show character set
show collation
Run Code Online (Sandbox Code Playgroud)
并且可以找到utf8的所有有效排序规则:
show collation where charset = 'utf8'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32687 次 |
| 最近记录: |