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

问题描述 投票:1回答:2

我知道默认情况下MySQL不区分大小写。我还读到了使用排序规则utf8_general_cs来启用区分大小写。但我得到一个错误,说没有确定排序规则。此外,当我查询charset utf8的排序规则时,结果集仅显示与ci相关的排序规则。那么问题1是,我们是否需要配置cs相关的排序规则?如果是这样,那么我想要一些指导。或者它依赖于某些特定的数据库引擎?

另外我读到了使用utf8_bin collat​​ion使MySQL查询搜索区分大小写。我这样做了。将架构排序规则设置为utf8_bin。但它没有用。重新启动MySQL服务以确保已更新排序规则。但是,当我做一个

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

它的名称也从'EL'开始。

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

mysql database
2个回答
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很多;-)


0
投票

我以为这通常有效?!无论如何,如果这是一个局部问题,有一些解决方案:主要是可以使用SELECT * FROM users WHERE name REGEXP '^[E][P]*$' - 正则表达式。替代方法当然,你必须通过另一种语言包装来访问它,以实现自动化或处理而不是MySQL控制台吗?我建议使用你用于包装器的语言对它进行排序,这很容易实现。然而,仍然只处理从el开始的那些,因为这将减少要检查的事物的数量。

© www.soinside.com 2019 - 2024. All rights reserved.