我知道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
答案 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
开头的内容,因为这会减少要检查的内容。