摘要:通过设置表的字符集和排序规则,解决MySQL查询时不区分字母大小写、插入时不支持特殊字符的问题。
关于MySQL查询时不区分字母大小写、插入时不支持特殊字符的问题,只有修改表的字符集和排序规则才能根治,而且事半功倍。utf8mb4支持的最低mysql版本为5.5.3+,若不是,请升级到较新版本。下面以把字符集和排序规则分别修改为utf8mb4 和 utf8mb4_bin为例,进行展开描述,当然,童鞋们也可以换成其它字符集和排序规则,请量体裁衣,自行决定。
查看表的字符集和排序规则
查看schema中某张表的排序规则:
show table status from schema_name like '%table_name%';
查看schema中所有表的排序规则:
SELECT table_name, table_type, engine, version, table_collation
FROM information_schema.tables WHERE table_schema = 'schema_name' ORDER BY table_name DESC;
上述SQL脚本支持表名模糊匹配。查看某张表中字段的字符集和排序规则:
show full COLUMNS FROM table_name;
修改表的字符集和排序规则
修改数据库的字符集编码命令如下:
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
修改表的字符集编码:
alter table table_name character set utf8mb4;
它只修改表新增列的默认定义,已有列的字符集不受影响,请格外注意。若要同时修改表字符集和已有列字符集,并将已有数据进行字符集编码转换,请使用如下CONVERT TO脚本:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
修改字段的字符集和排序规则
修改某个字段的字符集编码:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;
注:执行命令过程中字段名无需加引号。修改完数据库字符集,立即生效。
结束语
工作中处处都需要学习,有时候看似简单的一个优化,可以让你深入学习后收获各种知识。所以在学习中要不求甚解,不仅要了解这个知识点,也要熟悉为什么要这么做。