2016-12-16 62 views
0

我的POJO有一個屬性name,它應該是唯一的,因此我使用@Column(unique = true)對它進行了註釋。長度默認爲255,我使用MySQL 5.5,數據庫排序規則設置爲utf8mb4_bin。我知道我無法在列上指定唯一約束,但是我想知道爲什麼我的日誌文件中沒有關於創建索引失敗的警告/錯誤。 MySQL的響應索引創建具有手動嘗試「#1071 - 指定的鍵過長,最大密鑰長度爲767個字節」這樣至少某種暗示應該是可見的,不應該嗎?在MySQL中創建JPA唯一索引默認失敗

有沒有一種方法可以在運行時處理/捕獲這些類型的錯誤?例如。記錄錯誤消息,以便開發人員知道發生了什麼問題。

我使用的彈簧引導起動父母爲我的項目Maven的父母1.4.2.RELEASE和包括彈簧引導起動數據JPA添加所有相關的依賴關係。這包括spring-data-jpa-1.10.5.RELEASE和hibernate-core-5.0.11。

回答

1

誤差分別你可以索引的最大值的255個或191個字符,是由於

InnoDB的具有767個字節的最大索引長度,所以對於UTF8或utf8mb4列。如果您當前使用索引超過191個字符的utf8列,則需要索引較少數量的字符。 https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html

您ARA使用字段255和最大的utf8mb4_bin是191,所以你有錯誤不被創建索引o如果這是一個警告,它會創建一個最大值索引到191.

+0

親愛的羅密歐,感謝您的反饋。然而,我的問題是關注事物的Java方面。我指出,我知道底層的MySQL問題的,我想知道如何處理模式創建過程中的錯誤不提出任何紅旗無論是在我的代碼也不在我的日誌文件。 – oschlueter

+0

對不匹配感到抱歉。我有相同的版本與'spring.jpa.hibernate.ddl-AUTO TEST =創造滴',並有記錄'org.hibernate.tool.hbm2ddl.SchemaExport錯誤:指定的鍵過長;最大密鑰長度是767字節' –