2013-04-22 45 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在将其插入数据库之前检查变量的大小。如果变量太长,可以让它切掉超出尺寸限制的部分。

相关问题