首页  >  文章  >  数据库  >  为什么使用 JDBC 插入 MySQL 时我的 UTF-8 字符串显示为损坏的字符?

为什么使用 JDBC 插入 MySQL 时我的 UTF-8 字符串显示为损坏的字符?

Barbara Streisand
Barbara Streisand原创
2024-11-01 18:03:02145浏览

Why Are My UTF-8 Strings Displaying As Corrupted Characters When Inserting Into MySQL Using JDBC?

如何通过 JDBC 正确地将 UTF-8 字符串插入 MySQL

问题陈述:

使用 JDBC 接口将 UTF-8 字符串插入 MySQL 数据库时,字符显示为损坏或不可读的符号。

预期字符串: Апарати
实际结果: ??????

初始故障排除:

<code class="java">Class.forName("com.mysql.jdbc.Driver").newInstance();
String dbPath = String.format(
    "jdbc:mysql://%s:%d/%s?user=%s&amp;password=%s&amp;characterEncoding=utf-8&amp;&quot; + 
    "&amp;useUnicode=true", ci.host, ci.port, ci.dbName, ci.user, ci.password);
conn = java.sql.DriverManager.getConnection(dbPath);</code>

其他故障排除:

另外还采取了这些步骤:

  • 将 Costis Aivalis 建议的行添加到 /etc/mysql/my.cnf。
  • 从代码中删除了以下行:

    <code class="java">query = "set character set utf8";
    stat.execute(query);</code>

解决方案:

看来Java代码和MySQL表数据之间的差异是由于字符集不一致造成的。删除 Java 代码中的字符集设置后,该问题得到解决。

将 Java 代码中使用的 MySQL 命令与命令提示符中的类似命令进行比较,发现了细微的差异:

<code class="java">String query = "insert into clt" + " (id, text) values (?, ?)";</code>
<code class="bash">mysql> insert into clt (id, text) values (12656697, "Апарати");</code>

在 Java 代码中,创建表语句中省略了字符集 utf8 后缀。Java 代码和直接 MySQL 命令之间的这种差异导致字符集处理不匹配。

结论:

使用 JDBC 接口将 UTF-8 字符串插入 MySQL 时,必须确保 Java 代码和数据库配置之间的字符集设置保持一致。这确保了字符串被正确处理并存储在数据库中。

以上是为什么使用 JDBC 插入 MySQL 时我的 UTF-8 字符串显示为损坏的字符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn