如何检查 MySQL utf8mb4 转换的键和字符宽度

How to Check Key and Character Widths for MySQL utf8mb4 Conversion

我要将一系列MySQL 数据库转换为utf8mb4 字符集。大多数数据库都使用 utf8 字符集。

This article 指出在转换前应解决的两个潜在问题领域:

  1. 减少了字符串类型的最大字符长度(例如:tinytext 从 85 个字符减少到 63 个字符)
  2. 索引键最大字符宽度减少(从 255 减少到 191),因为最大键长度为 767 字节。根据 this page,此最大值在 MySQL 5.7.7 中提高到 3072 字节,但如果键大于 768 个字符,这种情况仍然会发生。

是否存在可用于检查数据库是否存在这些问题的脚本或程序?我想在尝试转换之前找出所有潜在问题。

后续问题:在 utf8mb4 字符集转换之前是否还有其他情况需要确定?

  1. 仅通过 mysqldump --no-data
  2. 转储模式
  3. 将该模式加载到另一个数据库或服务器中。
  4. 写下您最终需要的所有 ALTERs
  5. 执行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_codemd5uuid 等,则可能不需要这样做