我遇到问题 - 我得到“行大小太大(> 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。 –