我知道使用UTF8時,索引大小限制爲767字節,但我需要一個varchar字段爲512個字符,UTF8和可編入索引,以便我可以使用INSERT ON DUPLICATE KEY UPDATE進行更新。它工作正常,如果該字段是255個字符,但我需要存儲大於255個字符的Windows文件路徑,也可能包含Unicode和外來字符。非常感謝任何有關解決方法的建議。Mysql錯誤,「指定的密鑰太長,最大密鑰長度爲767字節」需要解決方法
0
A
回答
0
兩個解決方法,一個是將引擎更改爲TokuDB並使用聚簇索引;另一種是直接使用UTF8字段的md5作爲密鑰而不是UTF8。
1
您可以將數據的散列存儲在索引列中,並將原始數據存儲在另一列上。
SHA1('over 225 character') => 2c42692a0369f4a6060850f1a7997ae7b112d23b
+0
這工作完美。我爲散列創建了另一個字段,將其用於索引,然後將實際數據放入512個字符的字段中。 – rerat
相關問題
- 1. UNIQUE INDEX - 指定的密鑰太長;最大密鑰長度是767字節
- 2. SQL錯誤#1071 - 指定的密鑰太長;最大密鑰長度爲767個字節
- 3. 指定的密鑰太長;最大密鑰長度是767字節。 SQL錯誤:1071
- 4. Mysql ::錯誤:指定的鍵太長;最大密鑰長度爲1000字節
- 5. 「指定的密鑰太長;最大密鑰長度爲1000字節」
- 6. 指定的密鑰太長;最大密鑰長度爲1000字節
- 7. #1071 - 指定的密鑰太長;最大密鑰長度爲1000字節
- 8. 指定的密鑰太長;最大密鑰長度爲1000字節
- 9. 指定的密鑰太長;最大密鑰長度是767字節mysql,entityframework(遷移)
- 10. 指定的密鑰太長;最大密鑰長度是767字節 - ASPNet標識MySQL
- 11. Mysql導入的laravel voyager數據庫錯誤 - 指定的鍵太長;最大密鑰長度爲767字節
- 12. Apache Airflow - mysql'指定的密鑰太長;最大密鑰長度爲1000個字節
- 13. SQL:密鑰指定太長
- 14. 無法將數據庫複製到遠程主機。指定的密鑰太長;最大密鑰長度爲767個字節
- 15. InnoDB最大密鑰長度
- 16. Laravel遷移錯誤:語法錯誤或訪問衝突:1071指定的鍵太長;最大密鑰長度爲767字節laravel 5.3
- 17. Laravel遷移錯誤:語法錯誤或訪問衝突:1071指定的鍵太長;最大密鑰長度是Laravel 5.4 767個字節
- 18. SonarQube錯誤:組件密鑰長度長於最大允許
- 19. Laravel 5.4:指定的密鑰太長錯誤
- 20. 警告!最大密鑰長度是900字節。該索引的最大長度爲8009字節
- 21. 節點加密createDecipheriv拋出無效的密鑰長度錯誤
- 22. 無效的AES密鑰長度錯誤
- 23. TLS 1.2 - 密鑰對大小和加密密鑰長度
- 24. MySQL'太多密鑰'錯誤
- 25. RijndaelManaged密鑰長度是否與AES [密鑰長度]相同?
- 26. memcached中的最大密鑰長度和最大值是多少?
- 27. 排序字典的密鑰長度
- 28. iPhone 3DES加密密鑰長度問題
- 29. 公鑰長度vs加密算法
- 30. ValueError:AES密鑰長度必須爲16,24或32字節PyCrypto 2.7a1
如果它工作正常,暗示你所使用的MySQL特定UTF-8 3字節,而不是真正的UTF-8是每字符4個字節的varchar 255字段的長度。 使用UTF-8 4字節[這是真正的UTF-8](http://stackoverflow.com/a/279279/3536236)的唯一索引字符串的最大大小約爲190個字符。 如果你要在你的字段中有「外來」字符,你應該使用MySQL中的'UTF8mb4_'字符集 – Martin
謝謝你糾正我需要使用UTF8mb4。 – rerat