首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MYSQL区分大小写搜索utf8_bin字段

MYSQL区分大小写搜索utf8_bin字段
EN

Stack Overflow用户
提问于 2009-05-23 07:23:05
回答 4查看 34.4K关注 0票数 19

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

代码语言:javascript
复制
mysql> select * from page where pageTitle="Something" Collate utf8_general_ci;

错误1253 (42000):归类'utf8_general_ci‘对字符集'latin1’无效

代码语言:javascript
复制
mysql> select * from page where pageTitle="Something" Collate latin1_general_ci;

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

我是SQL的新手,所以我想知道是否有人可以帮助我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-23 07:55:58

MySQL中的字符串有一个character set and a collation。Utf8是字符集,utf8_bin是字符集的排序规则之一。要将字符串文字与utf8列进行比较,请将其转换为utf8,方法是在其前面加上_charset表示法:

代码语言:javascript
复制
_utf8 'Something'

现在,排序规则只对某些字符集有效。utf8的区分大小写的排序规则似乎是utf8_bin,您可以像这样指定它:

代码语言:javascript
复制
_utf8 'Something' collate utf8_bin

使用这些转换,查询应该可以工作:

代码语言:javascript
复制
select * from page where pageTitle = _utf8 'Something' collate utf8_bin

_charset前缀适用于字符串文字。要更改字段的字符集,可以使用CONVERT ...使用。当您想要将pageTitle字段转换为另一个字符集时,这很有用,如:

代码语言:javascript
复制
select * from page 
where convert(pageTitle using latin1) collate latin1_general_cs = 'Something'

要查看名为'TAB‘的表中名为'col’的列的字符和排序规则,请尝试:

代码语言:javascript
复制
select distinct collation(col), charset(col) from TAB

可以使用以下命令找到所有字符集和排序规则的列表:

代码语言:javascript
复制
show character set
show collation

所有有效的utf8排序规则都可以通过以下命令找到:

代码语言:javascript
复制
show collation where charset = 'utf8'
票数 41
EN

Stack Overflow用户

发布于 2013-05-18 23:38:08

还请注意,如果使用"Collate utf8_general_ci“或"Collate latin1_general_ci",即"force”collate -这样的转换将阻止使用现有的索引!这可能是未来性能的瓶颈。

票数 2
EN

Stack Overflow用户

发布于 2015-12-23 19:22:39

试试这个,它对我很管用

SELECT * FROM COLLATE WHERE UPPER(name) =UPPER(‘jos’)COLLATE utf8_bin;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/901066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档