这是我的连接设置:
Connection conn = DriverManager。getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8",用户名,密码);
我得到以下错误时轮胎添加一行到一个表:
错误的字符串值:'\xF0\x90\x8D\x83\xF0\x90…在第1行为“content”列
我插入数千条记录,当文本包含\xF0时,我总是得到这个错误(即不正确的字符串值总是以\xF0开始)。
列的排序规则是utf8_general_ci。
有什么问题吗?
提示:在AWS RDS上,你需要一个新的参数组为你的MySQL数据库的参数(而不是编辑my.cnf)
collation_connection: utf8mb4_unicode_ci
collation_database: utf8mb4_unicode_ci
collation_server: utf8mb4_unicode_ci
character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: utf8mb4
character_set_results: utf8mb4
character_set_server: utf8mb4
注意:character_set_system保持“utf8”
这些SQL命令不会永久工作-只在会话中:
set character_set_server = utf8mb4;
set collation_server = utf8mb4_unicode_ci;
这不是推荐的解决方案。但值得分享。因为我的项目是升级数据库从旧的Mysql到最新的(8).但我不能改变表结构,只有数据库配置(Mysql)。mysql服务器的解决方案。
Windows测试
mysql 8.0.15
在mysql配置中搜索
sql模式= "…"
取消它。或者在我的例子中,只需输入/添加
sql模式= " NO_ENGINE_SUBSTITUTION "
为什么不推荐解决方案。因为如果你用拉丁语(我的情况)..数据插入成功,但没有插入内容(mysql没有响应错误!!)例如,你输入这样的信息
等等 \x12
它保存
[盒子]
好吧. .对于我的问题…我可以把字段改为UTF8..但是有一个小问题。参见上面关于其他解决方案失败的答案,因为字没有插入,因为包含超过2个字节(cmiiw)..这个解决方案使您的插入数据变成方框。合理的是使用blob..你可以跳过我的回答。
另一个与此相关的测试是..在保存之前对代码使用utf8_encode。我使用latin1和它是成功的(我不使用sql模式)!与上面使用base64_encode的答案相同。
我的建议是分析你的表格需求,并尝试从其他格式改为UTF8