You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java向MySQL数据库插入阿拉伯字符时遇到异常问题

解决Java插入阿拉伯字符到MySQL的编码问题

看起来你遇到的问题其实是MySQL utf8 字符集的一个常见坑——MySQL里的utf8并不是真正的UTF-8,它实际上是utf8mb3,最多只支持3字节的Unicode字符。虽然阿拉伯字符大多在这个范围内,但结合JDBC连接参数和SQL拼接方式的问题,就会触发这个错误。下面是一步步的解决方法:

1. 把数据库和表的字符集改成utf8mb4

utf8mb4才是MySQL对完整UTF-8的实现,支持所有Unicode字符(完美兼容阿拉伯字符)。你可以用以下SQL修改:

-- 修改数据库字符集
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表和所有字段的字符集
ALTER TABLE keyword CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 修正JDBC连接URL参数

你的连接参数不够完整,需要补充几个关键参数来确保编码一致。完整的URL应该是:

String url = "jdbc:mysql://127.0.0.1:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8mb4&serverTimezone=UTC&useSSL=false";
String user = "root";
String passwd = ".........";
Connection connection = DriverManager.getConnection(url, user, passwd);

这里新增的characterSetResults=utf8mb4确保从数据库返回的结果也是正确编码,serverTimezone=UTC避免时区相关的隐性问题。

3. 用PreparedStatement代替Statement拼接SQL

直接拼接字符串插入阿拉伯字符很容易出现编码转换错误,而且还存在SQL注入风险。改用PreparedStatement通过参数绑定传递字符串,能确保编码正确传递:

String query3 = "INSERT INTO keyword (idkeyword, keyword) VALUES (?, ?)";
PreparedStatement pstmt = connection.prepareStatement(query3);
pstmt.setInt(1, keyWord.getId());
pstmt.setString(2, "عماد");
pstmt.executeUpdate();
pstmt.close();

4. 检查MySQL全局配置(可选但推荐)

如果上面的步骤还没解决,可能是MySQL全局字符集没设置对。找到你的MySQL配置文件(Linux是my.cnf,Windows是my.ini),添加或修改以下配置:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4

修改后重启MySQL服务,确保全局字符集生效。

按照这些步骤操作后,应该就能顺利插入阿拉伯字符了。

内容的提问来源于stack exchange,提问作者DevNight89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:06:23