【问题标题】:mysql, utf-8 column: how to select only case-sensitive?mysql, utf-8 专栏:如何选择只区分大小写?
【发布时间】:2015-03-28 12:51:32
【问题描述】:

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

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

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

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

我的情况有什么解决办法?

谢谢。

【问题讨论】:

  • 你能发布一些示例数据吗...

标签: mysql select utf-8 case-sensitive


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2014-07-19
      • 2015-11-10
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多