2017-08-02 44 views
0

我正在使用MySql 5.5.37。我有一個InnoDB表具有以下列什麼是MySql文本列的最大字符長度?

| 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] 

我的問題是,什麼是最大長度(以字符)的文本列?

+1

你有沒有試圖尋找答案?重複問題標題與您的問題幾乎完全相同。 – Barmar

+1

最大長度是64K _bytes_,它介於16K和64K之間'utf8mb4' _characters_。切換到「MEDIUMTEXT」以增加限制。 –

回答

2

這個問題是關於個字符;擬議的「dup」大約是字節。所以,我重新打開了它。

如果TEXT列是64K字節,這是某處字符 16K和64K之間utf8mb4最大長度。

您正在使用latin1,64K。如果是utf8,64K/3。等

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