【问题标题】:UTF-8 character not supporting不支持 UTF-8 字符
【发布时间】:2014-09-09 13:08:41
【问题描述】:

我正在尝试在数据库中添加如下行:

String query = "update Mutable e set e.Name = "Благодаря";
Statement s;
s.execute(query);

但它更新为??????在数据库中。我将此名称设置为俄语字符串。 但是如果我在 MySQL 查询浏览器中运行相同的查询,那么它会正确更新名称。 我找不到原因。

【问题讨论】:

  • 您的代码示例中的双引号不匹配。这不是您的问题的原因,但整理它可能会使您的示例更易于阅读。
  • 我假设在 blagodarja 周围单引号。
  • 你说它更新为“??????”。您如何检索和显示此值?
  • 此链接可能对您有所帮助stackoverflow.com/questions/730359/…
  • 你的数据库的字符集是什么?

标签: java mysql utf-8


【解决方案1】:

此问题已解决。问题出在 my.cnf 文件中。 在 my.cnf 文件中,默认字符集是 latin1。我将其更改为 UTF8 并且有效。

【讨论】:

    【解决方案2】:
    1. 试试

      "update Mutable e set e.Name = '\u0411\u043b\u0430\u0433\u43e\u00434\u0430\u0440\u044f'";

      这种 u 转义为 ASCII 消除了一个问题:java 源文本的编码必须与 javac 编译器使用的编码相同。

    2. 然后,结果很容易在非西里尔编码的 Windows 或 IDE 控制台中显示为 false。和你一样检查数据库中的结果。

      您可以检查值间接:

      System.out.println("Okay: " + !fieldValue.contains("?"));
      
    3. 验证连接字符串是否类似于:

      "jdbc:mysql:///dbname?useUnicode=true&characterEncoding=utf-8"
      

      确保驱动程序通信使用 UTF-8。

    【讨论】:

    • 我试过这个。但是当我输入这一行时,eclipse 编辑器会抛出错误“无效的 Unicode”。
    • @Pratik 所有的 unicode 都应该是 4 位数字,而不是 3 或 5。顺便说一句,一旦代码被编译,它们就不应该有任何区别。
    • 此问题已解决。问题出在 my.cnf 文件中。在 my.cnf 文件中,默认字符集是 latin1。我将其更改为 UTF8 并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多