【问题标题】:How to handle SQL state [HY000]; error code [1366]; Incorrect string value?如何处理 SQL 状态 [HY000];错误代码[1366];字符串值不正确?
【发布时间】:2012-06-18 22:11:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: java mysql utf-8


    【解决方案1】:

    这些似乎是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();
    

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 2015-03-29
      • 2020-06-07
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多