Mysql表字符集更换
字符集
1.系统默认设置字符集为 utf8mb4,校验规则为 utf8mb4_bin,但可根据应用需要在申请时选
择其他字符集。
2.绝大多数数据库产品 UTF8 字符集存储汉字占用 3 个字节(部分特殊汉字占用 4 个字节),存
储英文字符占用 1 个字节。而 MYSQL 默认按字符方式存储数据,对于汉字,例如 varchar(10)
可以存 10 个汉字。
在从其它数据库产品迁移到 MYSQL 数据库(UTF8 字符集)的情况下,无需担心字符集转
换问题。因为 utf8mb4 完全兼容 utf8,且支持 emoji 表情及更多的字符,唯一不足的是,
utf8mb4 会占用更多的空间,一个字符最多占用 4 个字节(部分特殊汉字,emoji 表情),存储
普通汉字和存储英文字符占用的字节和 UTF8 一样。
校验规则
字符集 | 校验规则 | 校验规则说明 |
---|---|---|
utf8mb4 | utf8mb4_bin | 将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容 |
utf8mb4 | utf8mb4_general_ ci | 不区分大小写。没有实现 Unicode 校验规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。 |
utf8mb4 | utf8mb4_general_ cs | 区分大小写 |
utf8mb4 | utf8mb4_unicode_ ci | 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序,Unicode 校验规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,仅部分支持 Unicode 校对规则算法,一些字符还是不能支持。 |
字符集级别
mysql数据库包含四种级别的字符集,分别是库实例,数据库、表、表字段,执行的优先级是从低到高,意思就是实例优先级低于数据库,数据库低于表,表低于表字段
查看方式
实例:show variables like ‘%char%’
数据库:show create database groupdb
表:show create table groupdb.gp_contact
表字段:show full columns from groupdb.gp_contact
小数据量表更换字符集
alter table `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
注意:命令只会对后续插入的数据生效。这意味着在执行此命令之前插入的所有数据都将保持原字符集,而新插入的数据将使用utf8mb4字符集。
大数据量表更换字符集
-- 建表
CREATE TABLE `table_name_20230605` (`id` CHAR(32) NOT NULL,`name` CHAR(32) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci-- 替换
RENAME TABLE table_name to table_name_backup_20230605, table_name_20230605 to table_name;-- 插入热点数据
INSERT INTO table_name (SELECT * FROM table_name_backup_20230605 WHERE createtime >= '2023-06-05 19:30:00');