gpt4 book ai didi

java - 无法使用 Java PreparedStatement 在 MySQL 中存储 UTF-8 内容

转载 作者:可可西里 更新时间:2023-11-01 06:59:03 25 4
gpt4 key购买 nike

由于某些奇怪的原因,我似乎无法将 UTF-8 数据添加到我的 MySQL 数据库中。当我输入非拉丁字符时,它存储为 ??????。其他一切都保存完好。因此,例如,“this is an example®™”存储正常,但“和英辞典”存储为“????”。

连接 url 没问题:

private DataSource getDB() throws PropertyVetoException {
ComboPooledDataSource db = new ComboPooledDataSource();
db.setDriverClass("com.mysql.jdbc.Driver");
db.setJdbcUrl("jdbc:mysql://domain.com:3306/db?useUnicode=true&characterEncoding=UTF-8");
db.setUser("...");
db.setPassword("...");
return db;
}

如您所料,我正在使用 PreparedStatement,我什至尝试按照某人的建议输入“set names utf8”。

    Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = db.getConnection();

stmt = conn.prepareStatement("set names utf8");
stmt.execute();
stmt = conn.prepareStatement("set character set utf8");
stmt.execute();

... set title...
stmt = conn.prepareStatement("INSERT INTO Table (title) VALUES (?)");
stmt.setString(1,title);

stmt.execute();
} catch (final SQLException e) {
...

table 本身似乎没问题。

Default Character Set: utf8
Default Collation: utf8_general_ci
...
Field title:
Type text
Character Set: utf8
Collation: utf8_unicode_ci

我通过 GUI 编辑器输入 Unicode(特别是“和英辞典”)然后从表中进行选择来测试它——它返回得很好。所以这似乎是 JDBC 的问题。

我错过了什么?

最佳答案

在您的 JDBC 连接字符串上,您只需像这样设置字符集编码:

jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8

关于java - 无法使用 Java PreparedStatement 在 MySQL 中存储 UTF-8 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com