2013-04-22 50 views
3

我正在將字符串寫入具有TEXT類型字段的數據庫中。這意味着我可以將65,535 bytes寫入該字段。從那以後,我會得到一個SQL異常:如何剪切字符串以適合MySQL中的TEXT字段

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'DETAILS' at row 1 

所以我的問題是現在,如何檢查我的字符串,然後也我怎麼能砍字符串在正確位置,它仍然融入數據庫。

我知道它也取決於編碼。我剛剛看到MySQL模式使用「latin1 - 默認集合」字符集。

+0

請參閱:http://stackoverflow.com/questions/3186343/automatically-trimming-length-of-string-submitted-to-mysql – Perception 2013-04-22 15:16:26

+0

簡短回答:String.getBytes(<編碼>)。看看 http://stackoverflow.com/a/4385653/1919228 – 2013-04-22 15:18:00

+0

好的 - 這給我拉丁文1(ISO-8859-1)的字符串的大小。但是,我現在如何在這個位置分割字符串? – FiveO 2013-04-22 15:19:02

回答

1

我覺得我這個代碼得到它:

public String cutStringForTEXT(String string) { 
    String ENCODING = "ISO-8859-1"; 
    int FIELD_SIZE = 65535; 
    try { 
     byte[] bytes = string.getBytes(ENCODING); 
     if (bytes.length >= FIELD_SIZE) { 
      return new String(Arrays.copyOfRange(bytes, 0, FIELD_SIZE), ENCODING); 
     } 
    } catch (UnsupportedEncodingException ex) { 
    } 
    return string; 
} 

如果它太長,然後我得到的字節數組的子集,並將其轉換回爲一個字符串。

0

您正在使用php在您的數據庫中插入值,您可以讓php在將其插入數據庫之前檢查變量的大小。如果變量太長,可以讓它切掉超出尺寸限制的部分。

相關問題