MySQL搜索精准匹配大小写(转换字符集排序规则)

常规搜索

通常情况下,我们创建数据库和数据表的时候,会选择"utf8mb4"这个字符集,而排序规则,可能就是默认的"utf8mb4_0900_ai_ci",这种排序规则在搜索的时候,是忽略大小写的(也包括部分中英文符号)。
举例一:
MySQL搜索精准匹配大小写(转换字符集排序规则)_第1张图片
这里搜索的是中文括号,但是查询结果中,中文英文括号的数据都搜索出来了。
不仅仅是括号,包括分号,逗号等符号也都会遇到此类问题。
举例二:
MySQL搜索精准匹配大小写(转换字符集排序规则)_第2张图片
这里搜索的是小写的beijing,但是查询结果中,大写的Beijing被搜索出来了。

精准匹配

使用"BINARY"关键字,转换二进制字符串,再进行匹配搜索。
举例:
MySQL搜索精准匹配大小写(转换字符集排序规则)_第3张图片

转换字符集排序规则

我们可以修改已有数据表的排序规则,来达到精准搜索匹配的目的。
下面以测试数据表为例:

查看当前表结构

执行SQL,查询表结构:

SHOW CREATE TABLE company_info;

返回:

CREATE TABLE `company_info` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR ( 50 ) NOT NULL, PRIMARY KEY ( `id` ) ) ENGINE = INNODB AUTO_INCREMENT = 1005 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci

根据返回结果,可以看出,当前字符集是"utf8mb4",排序规则是"utf8mb4_0900_ai_ci"。

转换排序规则

执行SQL,转换排序规则为"utf8mb4_bin":

ALTER TABLE company_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

执行过后,我们可以再次查看表结构,会发现排序规则已经变更。

SHOW CREATE TABLE company_info;

也可以执行下面这条SQL来查看数据表中name字段的值对应的排序规则。

SELECT COLLATION(`name`) FROM company_info;

这里会返回"utf8mb4_bin"。


以上测试均在MySQL8.0.27下完成。
参考文档:
https://dev.mysql.com/doc/refman/8.0/en/charset-charsets.html
https://dev.mysql.com/doc/refman/8.0/en/charset-binary-set.html
https://dev.mysql.com/doc/refman/8.0/en/charset-conversion.html

你可能感兴趣的:(iCode,mysql,数据库,字符集,排序规则)