如何处理SQL状态[HY000];错误代码[1366];字符串值不正确?

时间:2012-06-15 20:02:49

标签: java mysql utf-8

我知道这个错误意味着mysql列不接受该值,但这很奇怪,因为该值适合Java UTF-8编码的字符串,而mysql列是utf8_general_ci。此外,除了这些之外,所有utf8角色到目前为止都已正常工作。

用例是:我正在导入推文。有问题的推文是:https://twitter.com/bakervin/status/210054214951518212 - 你可以看到两个“奇怪”的字符(以及它们之间的两个奇怪的空格)。问题是 - 如何处理这个问题:

  • 修剪这些字符(如何 - 它们是什么,Java UTF-8与MySQL的不同之处)
  • 使列能够接受此值(如何 - 还有比utf8_general_ci更多的内容)

1 个答案:

答案 0 :(得分:12)

这些似乎是unicode surrogate characters。由于它们不是真正的字符,并且似乎MySQL不支持它们,因此可以安全地修改它们:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
    char ch = text.charAt(i);
    if (!Character.isHighSurrogate(ch) && !Character.isLowSurrogate(ch)) {
        sb.append(ch);
    }
}
return sb.toString();