MySQL更改整个表所有字段的字符集和排序规则

疯一样的男子
疯一样的男子
发布于 2024-10-22 / 5 阅读
0
0

MySQL更改整个表所有字段的字符集和排序规则

如图中表所示,原本为utf8_general_ci排序规则,utf8字符集

更改排序规则和字符集

例如想一次性将表中的所有列都改为 utf8mb4_general_ci 排序规则和 utf8mb4 字符集,可以使用Navicat工具进行命令执行(其他工具或者MySQL自带的控制台也可以),执行以下命令,这会将 sys_pay_enterprise_easy 表中的所有字段统一转换为 utf8mb4 字符集,并使用 utf8mb4_general_ci 排序规则。

受影响的字段类型

执行语句时以下字段类型会受到字符集和排序规则更改的影响:

  1. CHARVARCHAR:这些字段存储字符串数据,与字符集和排序规则直接相关,因此会被更改为指定的字符集和排序规则。

  2. TEXT 类型(包括 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT):同样存储文本数据,会更改为新指定的字符集和排序规则。

  3. ENUMSET:这些字段也存储字符串值,因此会受到字符集和排序规则更改的影响。

不受影响的字段类型

执行语句时以下字段类型不会受到影响,因为它们与字符集和排序规则无关:

  1. 整数类型(INT、TINYINT、SMALLINT、BIGINT 等):这些字段存储数值,不涉及字符集或排序规则。

  2. 浮点和定点类型(FLOAT、DOUBLE、DECIMAL):与字符集无关,不会受到更改影响。

  3. 日期和时间类型(DATE、DATETIME、TIMESTAMP、TIME、YEAR):这些字段存储时间数据,同样与字符集无关。

  4. BLOB 类型(包括 TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB):这些字段存储二进制数据,与字符集无关,不会受到影响。

用途

如果当前表的字符集和排序规则不支持存储某些字符(如表情符号),或者需要统一字符集以便跨表或跨系统兼容,可以使用这条语句。

修改后,该表的新插入数据会使用 utf8mb4 编码,旧数据也会自动被转换。

注意事项

  1. 可能会影响性能:修改字符集需要对整个表进行数据转换,可能会占用较多的系统资源,尤其是表中数据量大的情况下。

  2. 备份数据:注意:执行这些操作前最好备份数据,以免因字符集转换导致意外数据损失,防止因为意外问题导致数据丢失或损坏。

  3. 检查索引:如果表中有索引,字符集的更改可能导致索引重建,甚至可能导致索引长度超出限制。

  4. 测试环境验证:先在测试环境中运行这条语句,验证没有问题后再应用到生产环境。

  ALTER TABLE sys_pay_enterprise_easy_func_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3-wygs.png

执行结果


评论