2

我使用 utf-8 字符串。它们应该存储在 MySQL 数据库表中。这就是为什么我决定为几列选择一些 utf-8 排序规则。现在我看到的选择并不像我想象的那么清楚。问题是 SELECT 语句应该区分大小写。但事实并非如此。

第一个选项是选择另一个 utf-8 排序规则(据我所知,唯一的非 ci 排序规则是 utf8_bin)。这是一个解决方案吗?第二种是在 SELECT 语句中使用 BINARY:

select col1, col2
from table1
where BINARY col3='CasE_sENsiTive';

这很简单,但它至少会降低 x10 倍甚至更多的性能。我的表有 1 个索引,没有 BINARY(无索引 = 慢)也能正常工作。

在我的情况下有什么解决方案?

谢谢你。

4

2 回答 2

3

您可以通过以下方式提高区分大小写搜索的性能:

select col1, col2 from table1 where col3='Case_sEnsiTive' AND BINARY col3="CasE_sENsiTive";

但是,如果没有充分的理由使用不区分大小写的排序规则,我强烈建议使用utf8_binas collat​​ion。

于 2012-04-19T21:40:40.247 回答
2

使用您提供的示例,或者,如果您始终将列视为区分大小写,请为其分配区分大小写的排序规则(即以_cs[case-sensitive] 或_bin[binary] 结尾的排序规则)。请参阅MySQL 参考中的区分大小写

于 2012-04-19T21:40:42.463 回答