在MySQL中强制区分大小写的问题

时间:2018-10-31 16:42:36

标签: mysql database

我知道MySQL默认情况下不区分大小写。 我还阅读了有关使用归类utf8_general_cs启用区分大小写的信息。但是我收到一个错误,说未识别排序规则。同样,当我查询字符集utf8的排序规则时,结果集仅显示与ci相关的排序规则。所以问题1是,我们需要配置与CS相关的排序规则吗?如果是这样,那么我想要一些指导。还是取决于某些特定的数据库引擎?

我还阅读了有关使用utf8_bin归类使MySQL查询搜索区分大小写的信息。我是这样将架构排序规则设置为utf8_bin。但这没有用。还重新启动了MySQL服务,以确保排序规则已更新。但是,当我做

 Select * from table where name like 'el%';

它也以'EL'开头。

注意:我最好在寻找在数据库级别设置排序规则的选项。 MySQL服务器版本5.6.x

2 个答案:

答案 0 :(得分:2)

列排序规则优先于数据库和表排序规则。如果您一直在进行更改,则您的列当前可能正在使用创建表时的默认值。您应该能够使用适当的SQL工具或通过运行以下命令来发现它:

SELECT table_schema, column_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'your database name'
AND table_name = 'your table name'

如果您不想更改列排序规则,则可以在表达式级别进行设置:

SELECT *
FROM foo
WHERE bar LIKE 'el%' COLLATE utf8mb4_0900_as_cs;

(演示)

归类会影响排序和字符比较,因此您必须read some docs才能确定最适合您的需求(如果您不是Unicode极客,这并不容易)。

我的项目都是西班牙语的,所以我经常使用utf8mb4_spanish_ci;-)

答案 1 :(得分:0)

我认为这正常吗?! 无论如何,如果这是一个局部问题,则有一些解决方案: 主要是可以使用SELECT * FROM users WHERE name REGEXP '^[E][P]*$'-正则表达式。 另类 当然,您必须通过自动化或处理的其他语言包装而不是MySQL控制台访问此包装吗?我建议使用您用于包装程序的语言对其进行排序,这很容易实现。不过,仍然只处理el开头的内容,因为这会减少要检查的内容。