字符集和比较规则
字符集
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中的
utf8
和utf8mb4
字符集区别在于前者是1-3字符(阉割),后者是1-4字符。
比较规则
sql
SHOW COLLATION LIKE 'utf8_%';
后缀 | 英文 | 不区分重音 |
---|---|---|
_ai | accent insensitive | 不区分重音 |
_as | accent sensitive | 区分重音 |
_ci | case insensitive | 不区分大小写 |
_cs | case sensitive | 区分大小写 |
_bin | binary | 以二进制方式比较 |
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;
一起设置如上三个参数配置。