java 如何处理SQL状态[HY 000]; error code [1366];字符串值不正确?

owfi6suc  于 2023-05-12  发布在  Java
关注(0)|答案(2)|浏览(189)

我知道这个错误意味着mysql列不接受值,但这很奇怪,因为值适合Java UTF-8编码的字符串,而mysql列是utf8_general_ci。此外,所有utf8字符到目前为止都工作正常,除了这些。
用例为:我正在导入推文。有问题的推文是:https://twitter.com/bakervin/status/210054214951518212-您可以看到两个“奇怪”字符(以及它们之间的两个奇怪空格)。问题是-如何处理这一点:

  • 修剪这些字符(它们是什么,Java UTF-8与MySQL有什么不同)
  • 使列能够接受此值(如何-是否存在比utf8_general_ci更utf-y的值)
huwehgph

huwehgph1#

这些似乎是unicode代理项字符。由于它们不是实际的字符,而且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();
7qhs6swi

7qhs6swi2#

我通过将数据库的排序规则从utf_8更改为utf_16来修复该错误。

相关问题