utf8和 utf8mb4的区别
utf8mb4是在Mysql 5.5.3之后添加的,mb4代表most bytes 4,一个字符最我占用4个字节,用来兼容4字节的Unicode字符,比如微信中的表情字符。utf8其实是utf8mb3,一个字符最多占用3个字节,utf8无法保存4个字节的Unicode字符。utf8mb4是utf8的超集,utf8转成utf8mb4,内容不会发生任何改变,没有任何兼容性问题。使用utf8mb4,在不使用char类型的字段时,同样的字符串也不会占用更多的空间,所以建议在普遍使用varchar的情况下,都使用默认的utf8mb4字符集。
utf8mb4下的Collation(排序规则)的命名规则
在创建数据库时,在选定字符集之后,还需要指定使用该字符集下的哪个排序规则,针对utf8mb4默认的Collation是
utf8mb4_0900_ai_ci,是utf8mb4字符集一个新的通用排序归类。 中间的0900,它对应的是Unicode 9.0的规范。最后两部分_ai_ci,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。
修改字符集的相关SQL语句
修改数据库默认字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
# 如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只是修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
# 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
# 如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
查看字符集
# 查看数据库编码:
SHOW CREATE DATABASE db_name;
# 查看表编码:
SHOW CREATE TABLE tbl_name;
# 查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;