一文带你了解MySQL字符集和比较规则
什么是字符集
数据在被存储到数据库中时,要被转换成计算机能够识别的二进制编码。而字符集就是将字符映射为二进制编码的规则集合。MySQL支持多种字符集,如utf8、gbk等。
字符集的作用
字符集决定了数据在存储和传输过程中的编码方式,它直接影响到存储和查询的结果。如果字符集设置不正确,可能会导致数据被储存为乱码或者无法正确匹配查询条件,而且还会影响系统性能。
MySQL字符集的种类
MySQL支持多种字符集,我们常用的如下:
- utf8mb4:MySQL5.5.3及以后版本,用于支持四字节存储的字符集,包含了几乎所有的字符。
- utf8:MySQL5.5.3之前版本的默认字符集,只支持三字节存储,不能存储一些特殊字符,如草书、楷书等。
- gbk:支持简体中文字符的字符集。
比较规则
比较规则用于指定比较字符串时的规则。常用的比较规则如下:
- utf8_general_ci: utf8字符集,不区分大小写。
- utf8_bin: utf8字符集,区分大小写。
当进行字符比较时,如果使用的字符集和比较规则不同,会导致查询结果不符合预期。
示例1:不同字符集导致乱码
创建一个students表:
CREATE TABLE students (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
向students表中插入一条带有中文的数据:
INSERT INTO students (name) VALUES ('张三');
当使用gbk字符集进行查询时,会出现乱码:
SELECT * FROM students WHERE name='张三' COLLATE gbk_chinese_ci;
应该使用utf8mb4字符集进行查询:
SELECT * FROM students WHERE name='张三' COLLATE utf8mb4_chinese_ci;
示例2:使用不同的比较规则
创建一个persons表:
CREATE TABLE persons (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入一条数据:
INSERT INTO persons (name) VALUES ('Tom');
当使用utf8_general_ci进行查询时,可以匹配到:
SELECT * FROM persons WHERE name='tom';
但是如果使用utf8_bin进行查询,就无法匹配到了:
SELECT * FROM persons WHERE name='tom' COLLATE utf8_bin;
总结
在使用MySQL时,字符集和比较规则的设置非常重要,能够影响到数据的存储、查询、传输等方面,务必慎重设置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你了解MySQL字符集和比较规则 - Python技术站