Skip to content

字符集和比较规则

字符集

sql
SHOW CHARSET LIKE 'utf8_%';
字符集编码长度
ASCII(128个字符)1字节
ISO 8859-1(256个字符,又叫latin1)1字节
GB2312(收录6763个汉字,兼容ASCII)字符在ASCII中采用1字节,否则2字节
GBK(对GB2312进行扩充,兼容GB2312)与GB2312相同
Unicode(兼容ASCII字符集,采用变长编码方式)UTF-8::1-4个字节,UTF-16:2或4字节,UTF-32:4字节

MySQL中的utf8utf8mb4字符集区别在于前者是1-3字符(阉割),后者是1-4字符。

比较规则

sql
SHOW COLLATION LIKE 'utf8_%';
后缀英文不区分重音
_aiaccent insensitive不区分重音
_asaccent sensitive区分重音
_cicase insensitive不区分大小写
_cscase sensitive区分大小写
_binbinary以二进制方式比较

MySQL中utf8默认的比较规则就是utf8_general_ci

字符集与比较规则的级别

sql
# [服务器级别]
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
# [创建或修改数据库比较规则]
CREATE[ALTER] DATABASE [database_name] CHARACTER SET utf8 COLLATE utf8_general_ci;
# [数据库级别]
USE [database_name];
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
# [表级别] 如果表不设置字符集和比较规则,默认继承数据库的配置
CREATE[ALTER] TABLE unicode(name VARCHAR(10)) CHARACTER SET utf8 COLLATE utf8_general_ci;
# [表级别] 查看表的字符集和编码规则
SHOW TABLE STATUS FROM unicode;

# [创建列的字符集和比较规则] 不设置默认读取表的配置
CREATE TABLE line(
	name VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_ci,
    age INT(16)
)
ALTER TABLE [table_name] MODIFY [column] VARCHAR CHARACTER SET latin1 COLLATE latin1_general_cs;

无论是只修改字符集或比较规则,未设置的一方都会自动的改为与修改一方对应的配置。

MySQL中字符集的转换

可以使用SET NAMES utf8;一起设置如上三个参数配置。