1. 前言
本文介绍如何在文本组件中实现忽略英文字母大小写来搜索内容(使用 MySQL 数据源直连模式)。
比如下图,在文本搜索组件中输入 “c” 则可以筛选出 Area 列包含小写字母“c”的数据。
如果你输入 “c” 时只列出了包含 “c” 的数据,而你希望同时筛选出包含大写 “C” 和小写 “c” 的数据,根据本文的配置修改 Collation 即可实现。
2. 配置
2.1 修改字段的校对规则(Collation)
① 查询当前 Collation
此处以 MySQL 数据库为例,参考如下操作将字段的校对规则修改为 _ci 后缀的校对规则即可。
以我的数据库表 general_ci_test 为例,先查看当前表的 Collation。
show full columns from <表名>;
可以看到 Area 字段的 Collation 是 utf8_bin,是大小写敏感的。
② 修改 Collation
我们使用如下 SQL 将其修改为 utf8_general_ci 就可以实现搜索时大小写不敏感。
ALTER TABLE `<库名>`.`<表名>`
MODIFY COLUMN `<字段名>` <字段类型> CHARACTER SET utf8 COLLATE utf8_general_ci ;
③ 修改后使用文本搜索忽略大小写效果
2.2 修改表的校对规则(Collation)
如果表中的所有字段都需要忽略大小写,则无需为每个字段配置 Collation,修改表的校对规则即可。
以我的数据库表 general_ci_test 为例,先查看当前表的 Collation。
show table status from <数据库名称> like '<表名>';
可以看到当前表 Collation 是 utf8_bin,是大小写敏感的,我们将其修改为 utf8_general_ci 就可以实现搜索时大小写不敏感。
ALTER TABLE `test`.`general_ci_test` COLLATE = utf8_general_ci;
Tip:需要注意,如果已经为某个字段指定了 Collation 则查询此字段时会优先使用字段中的 Collation 配置,而不会使用表中的 Collation。另外若果所有表都需要修改,也可以修改整个数据库的默认 Collation,此处不再展开。
3. 扩展阅读
3.1 DataEase 查询逻辑
在 DataEase 中制作图表时,DataEase 会生成 SQL 来查询我们的数据库,然后使用查询出的数据生成图表。
我们在搜索框中输入 “C” 时,DataEase 会生成一个模糊查询的 SQL,示意如下(此处仅做示意,实际SQL并非如此,但原理类似):
select * from table where area like '%C%';
3.2 COLLATE、Collation 是什么?
在 MySQL 中,COLLATE 和 Collation 都是指校对规则。COLLATE 是一个关键字,用于在 SQL 语句中指定一个特定的校对规则,而 Collation 则是一个名词,用于描述一个字符集和它所对应的校对规则。
COLLATE(校对规则)用于指定字符集的比较规则。字符集是一组字符的编码方式,而校对规则则是用于确定字符集中字符的比较和排序规则。在 MySQL 中,每个字符集都有一组默认的校对规则,但是我们可以通过在 SQL 语句中指定 COLLATE 参数来修改默认的校对规则,从而实现按不同规则进行字符的比较和排序。
使用 COLLATE 参数可以解决一些语言字符集的特殊排序需求,如汉字的拼音排序或者拉丁字母的大小写不敏感排序等。在实际应用中,可以根据具体需求选择合适的字符集和校对规则,以确保数据的正确比较和排序。
3.3 utf8_bin 和 utf8_general_ci 有什么区别?
在 MySQL 中,utf8_bin 和 utf8_general_ci 是两种常见的校对规则(Collation)。它们的区别在于排序规则和字符比较方式。
utf8_bin:以二进制方式比较字符串。在二进制比较中,每个字符都有一个对应的 ASCII 码或 Unicode 编码,比较时直接比较它们的编码值大小,因此区分大小写,且不考虑字符的语言、语境等其他因素,排序时也是按照编码值大小排序。因此,使用 utf8_bin 校对规则进行字符比较和排序时,会将不同大小写的字符和不同语言的字符看作完全不同的字符。
utf8_general_ci:基于字符的语言和语境进行比较和排序。ci 是 Case Insensitive 的缩写,即 "大小写不敏感",这种校对规则会忽略字符的大小写,并且会把某些字符视为相同的字符。例如,它会把拉丁字母的大小写视为相同,把一些重音符号或变音符号视为相同。在排序时,它会根据字符的语言和语境对字符进行比较和排序。
因此,如果需要对字符的大小写、语言和语境进行严格的比较和排序,可以选择 utf8_bin 校对规则;如果需要对字符的语言和语境进行比较和排序,并且忽略大小写,可以选择 utf8_general_ci 校对规则。