我正在使用MySql 5.5.37。我有一个InnoDB表,其中包含以下列
| MESSAGE | text | YES | | NULL | |
我注意到我们的日志中的错误(我们使用Hibernate v5)类似于
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'MESSAGE' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4094) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) [mysql-connector-java-5.1.22-bin.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) [mysql-connector-java-5.1.22-bin.jar:]
at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.executeUpdate(CachedPreparedStatement.java:115)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) [hibernate-core-5.1.5.Final.jar:5.1.5.Final]
我的问题是,TEXT列的最大长度(以字符为单位)是什么?
答案 0 :(得分:4)
这个问题是关于字符;建议的“dup”大约是 bytes 。所以,我重新打开了它。
TEXT
列为64K 字节时的最大长度,介于16K和64K之间utf8mb4
个字符。
您使用的是latin1
,64K。如果utf8
,则为64K / 3。等
切换到MEDIUMTEXT
将限制增加到16M(或16M / 4等)。