我遇到問題 - 我得到「行大小太大(> 8126)」。當試圖用Hibernate創建我的數據庫表時出錯(我在「create」上使用hibernate.hbm2ddl.auto屬性來做到這一點)。行大小太大(> 8126)休眠
問題是我有幾列應該是TEXT,而不是VARCHAR。顯然,這些列上的行太大,我得到了上述錯誤。
我配置Hibernate的方式是使用映射文件。
下面是如何映射的屬性之一是這樣的:
<property name="transmission_current_range" type="java.lang.String" length="65535">
<column name="TRANSMISSION_CURRENT_RANGE"/>
</property>
通知我,希望這將解決我的問題設置長度到65535,但事實並非如此。
你如何告訴Hibernate你希望這個列是一個TEXT而不是VARCHAR?我已經看過使用adnotations的例子,但我想用我的映射文件來做同樣的事情。
另外,TEXT的相應java類型是什麼?我搜索了這個,但我發現只有java.lang.String,這是用於VARCHAR和TEXT相同的數據類型,所以它沒有幫助。
編輯:顯然,這個問題是不是因爲我需要將數據變成「TEXT」,而不是「字符串,而是因爲我有這麼多列,每行(列)超過8126
極限我得到這個錯誤,現在:
「行大小太大。已用表類型的最大行大小(不計算BLOB)爲8126.這包括存儲開銷,請查閱手冊。你必須改變一些列爲文本或BLOB「
EDIT2:顯然,這個錯誤的原因是,我有這麼多的列,行長變得太大了,所以這不是一個問題文本,而不是VARCHAR 本身,而是,我只是在列長度方面太多「數據」。
改變MySQL的CFG文件innodb_strict_mode = 0
解決了這個問題,但是當我讓Hibernate創建數據庫同樣,自動創建的列是BLOB,而不是它們的原始數據類型(其中一些仍保持爲它們的原始數據類型)
這就像任何人選擇我的解決方案一樣。
我改變了所有以前的「java。lang.String「類型與上面的完全相同,但我仍然得到錯誤 現在生成的列是」longtext「類型的,但是我得到的錯誤是 –
OK,這很好,現在意味着你的數據庫引擎需要更多的配置;例如在MySQL的情況下:http://stackoverflow.com/q/15585602/248082 – nobeh
我看到的是InnoDB?我正在使用MySQL。 –