什么是MySql TEXT列的最大字符长度?

时间:2017-08-02 20:36:38

标签: mysql text innodb string-length

我正在使用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列的最大长度(以字符为单位)是什么?

1 个答案:

答案 0 :(得分:4)

这个问题是关于字符;建议的“dup”大约是 bytes 。所以,我重新打开了它。

TEXT列为64K 字节时的最大长度,介于16K和64K之间utf8mb4 个字符

您使用的是latin1,64K。如果utf8,则为64K / 3。等

切换到MEDIUMTEXT将限制增加到16M(或16M / 4等)。