mysql - 更改 mysql 编码的危险

标签 mysql sql

我有一个应用程序在过去几年中收集了大量数据,这些数据存储在许多 mysql 表中;然而所有的表都设置为

Encoding cp1252 West European (latin1)
Collation: latin1_swedish_ci

有特殊字符无法正常显示;我想更改为

Encoding: UTF-8 Unicode (utf8mb4)
Collation: utf8mb4_general_ci

我知道如何更改表,但是,我确实有许多包含约一百万行数据的表,更改所有表的编码有什么危险?

除了备份所有内容之外,我还能做些什么来最大程度地降低风险吗?

最佳答案

如果您没有任何字符列作为外键,则转换是安全的,因为第一个字符列中的所有字符都存在于第二个字符列中,但使用 utf8mb4_general_ci 您可能会更改顺序按字符列对行进行排序时。如果这对您来说是个问题,请尝试改用 utf8mb4_unicode_ci

如果您有外键,则应禁用 foreign_key_checks,并且仅在转换所有表后才将其重新启用。

此外,alter table 可能会锁定表并创建一个副本,因此,如果您在生产服务器上执行此操作,请做好停机准备。

关于mysql - 更改 mysql 编码的危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702672/

相关文章:

android - 从模型中获取 SQL 插入语句字符串?

mysql - 关系代数查询到 mySQL

SQL 将数据按行划分

sql - t-sql 将日期分配给学年

javascript - Ajax与数据不起作用,但它是成功的

mysql - 为什么我的查询无法从一个表中选择然后插入到另一个表中?

mysql - 如何在MySQL中使用外键选择表的一行?

php - MySQL - 使用 LEFT JOIN 返回随机记录

sql - 如何查看 MySQL 数据库/表/列的字符集是什么?

php - 我可以在执行 UPDATE 时从 mySQL 数据库检索变量吗?