如何检查 MySQL utf8mb4 转换的键和字符宽度
How to Check Key and Character Widths for MySQL utf8mb4 Conversion
我要将一系列MySQL 数据库转换为utf8mb4 字符集。大多数数据库都使用 utf8 字符集。
This article 指出在转换前应解决的两个潜在问题领域:
- 减少了字符串类型的最大字符长度(例如:tinytext 从 85 个字符减少到 63 个字符)
- 索引键最大字符宽度减少(从 255 减少到 191),因为最大键长度为 767 字节。根据 this page,此最大值在 MySQL 5.7.7 中提高到 3072 字节,但如果键大于 768 个字符,这种情况仍然会发生。
是否存在可用于检查数据库是否存在这些问题的脚本或程序?我想在尝试转换之前找出所有潜在问题。
后续问题:在 utf8mb4 字符集转换之前是否还有其他情况需要确定?
- 仅通过
mysqldump --no-data
转储模式
- 将该模式加载到另一个数据库或服务器中。
- 写下您最终需要的所有
ALTERs
。
- 执行
ALTERs
。这将向您展示您将遇到的问题。
其他提示:
- 不要使用
TINYTEXT
做任何事。使用 VARCHAR
或更大的 TEXT
.
- 请参阅此处了解您描述的 767 问题的 5 种解决方法:http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes
- link 还提供了创建您需要的
ALTER...CONVERT TO
集的提示。
- 使用
CONVERT TO
时,请记住它会更改 所有 文本列;如果您有一些故意为 ascii 的列,例如 postal_code
、md5
、uuid
等,则可能不需要这样做
我要将一系列MySQL 数据库转换为utf8mb4 字符集。大多数数据库都使用 utf8 字符集。
This article 指出在转换前应解决的两个潜在问题领域:
- 减少了字符串类型的最大字符长度(例如:tinytext 从 85 个字符减少到 63 个字符)
- 索引键最大字符宽度减少(从 255 减少到 191),因为最大键长度为 767 字节。根据 this page,此最大值在 MySQL 5.7.7 中提高到 3072 字节,但如果键大于 768 个字符,这种情况仍然会发生。
是否存在可用于检查数据库是否存在这些问题的脚本或程序?我想在尝试转换之前找出所有潜在问题。
后续问题:在 utf8mb4 字符集转换之前是否还有其他情况需要确定?
- 仅通过
mysqldump --no-data
转储模式
- 将该模式加载到另一个数据库或服务器中。
- 写下您最终需要的所有
ALTERs
。 - 执行
ALTERs
。这将向您展示您将遇到的问题。
其他提示:
- 不要使用
TINYTEXT
做任何事。使用VARCHAR
或更大的TEXT
. - 请参阅此处了解您描述的 767 问题的 5 种解决方法:http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes
- link 还提供了创建您需要的
ALTER...CONVERT TO
集的提示。 - 使用
CONVERT TO
时,请记住它会更改 所有 文本列;如果您有一些故意为 ascii 的列,例如postal_code
、md5
、uuid
等,则可能不需要这样做