2016-07-25 120 views
0

我知道使用UTF8時,索引大小限制爲767字節,但我需要一個varchar字段爲512個字符,UTF8和可編入索引,以便我可以使用INSERT ON DUPLICATE KEY UPDATE進行更新。它工作正常,如果該字段是255個字符,但我需要存儲大於255個字符的Windows文件路徑,也可能包含Unicode和外來字符。非常感謝任何有關解決方法的建議。Mysql錯誤,「指定的密鑰太長,最大密鑰長度爲767字節」需要解決方法

+0

如果它工作正常,暗示你所使用的MySQL特定UTF-8 3字節,而不是真正的UTF-8是每字符4個字節的varchar 255字段的長度。 使用UTF-8 4字節[這是真正的UTF-8](http://stackoverflow.com/a/279279/3536236)的唯一索引字符串的最大大小約爲190個字符。 如果你要在你的字段中有「外來」字符,你應該使用MySQL中的'UTF8mb4_'字符集 – Martin

+0

謝謝你糾正我需要使用UTF8mb4。 – rerat

回答

0

兩個解決方法,一個是將引擎更改爲TokuDB並使用聚簇索引;另一種是直接使用UTF8字段的md5作爲密鑰而不是UTF8。

1

您可以將數據的散列存儲在索引列中,並將原始數據存儲在另一列上。

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

這工作完美。我爲散列創建了另一個字段,將其用於索引,然後將實際數據放入512個字符的字段中。 – rerat

相關問題