【问题标题】:Mysql error, "Specified key was too long; max key length is 767 bytes" need workaroundMysql 错误,“指定的密钥太长;最大密钥长度为 767 字节”需要解决方法
【发布时间】:2016-07-25 02:58:25
【问题描述】:

我知道使用 UTF8 时索引大小限制为 767 字节,但我需要一个 varchar 字段为 512 个字符、UTF8 且可索引,以便我可以使用 INSERT ON DUPLICATE KEY UPDATE 对其进行更新。如果该字段是 255 个字符,它工作正常,但我需要存储大于 255 个字符的 Windows 文件路径,还可能包含 unicode 和外来字符。任何有关解决方法的建议将不胜感激。

【问题讨论】:

  • 如果它适用于 255 varchar 字段长度,这意味着您使用的是 MySQL 特定的 UTF-8 3 字节而不是真正的 UTF-8,即每个字符 4 字节。使用 UTF-8 4 字节 which is the true UTF-8 的唯一索引字符串的最大大小约为 190 个字符。如果您要在字段中使用“外来”字符,则应在 MySQL 中使用 UTF8mb4_ 字符集
  • 感谢您纠正我需要使用 UTF8mb4。

标签: mysql


【解决方案1】:

您可以将数据的哈希存储在索引列中,并将原始数据存储在另一列中。

SHA1('over 225 character') => 2c42692a0369f4a6060850f1a7997ae7b112d23b

【讨论】:

  • 这非常有效。我为哈希创建了另一个字段,将其用于索引,然后将实际数据放入 512 个字符的字段中。
【解决方案2】:

两种变通方法,一种是将引擎更改为 TokuDB 并使用聚簇索引;另一种是使用UTF8字段的md5作为key,而不是直接使用UTF8字段。

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 2016-04-15
    • 2012-05-31
    • 2017-11-23
    • 2017-02-01
    • 2015-06-22
    • 2014-08-17
    • 2013-12-21
    • 2015-06-29
    相关资源
    最近更新 更多