我在使用 mysql 和 hibernate 时遇到了所有其他语言的问题,然后是英语。尽管语言是 utf8(希伯来语),但我收到异常说明该语言不是 utf8。
我运行了 show variables like '%character%';
这就是我得到的结果:
我想也许是 character_set_server 的问题?它是 latin1,我无法将其更改为 utf8,我该怎么做?我正在使用 amazon RDS,在参数组下我看到了 utf character_set_server,所以我不明白为什么它不是上面的 utf8。
另一方面,也许这根本不是问题。欢迎任何其他建议。
编辑:
我设法将所有内容的附加图像值更改为 utf8,但我仍然遇到以下异常:
2016-02-21 08:46:05 DEBUG SqlExceptionHelper:139 - could not execute statement [n/a]
java.sql.SQLException: Incorrect string value: '\xD7\xAA\xD7\xA9\xD7\x95...' for column 'text' at row 1
...
...
...
2016-02-21 08:46:05 WARN SqlExceptionHelper:144 - SQL Error: 1366, SQLState: HY000
2016-02-21 08:46:05 ERROR SqlExceptionHelper:146 - Incorrect string value: '\xD7\xAA\xD7\xA9\xD7\x95...' for column 'text' at row 1
2016-02-21 08:46:05 INFO AbstractBatchImpl:208 - HHH000010: On release of batch it still contained JDBC statements
2016-02-21 08:46:05 DEBUG SqlExceptionHelper:225 - SQL Warning
java.sql.SQLWarning: Incorrect string value: '\xD7\xAA\xD7\xA9\xD7\x95...' for column 'text' at row 1
编辑 2:
所以我也设法修复了异常。它现在保存在数据库中。 我通过为每一列调用以下命令来修复它:
ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
我现在的问题是从数据库返回的结果带有问号。
调用 show variables like '%character%';
最佳答案
我不认为character_set_server
是问题所在。
\xD7\xAA\xD7\xA9\xD7\x95
是 'תשו' 的 utf8 编码的十六进制。如果它被解释为 latin1,它将是 'תשו'。
一个奇怪的设置是 character_set_result
的空值(空字符串?NULL?) , 它在 SELECT
期间控制音译.
请提供 SELECT col, HEX(col) FROM ...
的输出-- 如果你得到 D7AAD7A9D795
的十六进制对于那个希伯来语字符串,那么数据存储正确,我们应该看看输出端。如果不是,则数据存储不正确。或者那个ALTER
把事情搞砸了。
希伯来文,在utf8中,显示为十六进制,主要是'D7xx'。
你在几个地方需要 utf8:
- 您要插入的字节需要以 utf8 编码。
- 连接需要使用 utf8。
<property name="url" value="jdbc:mysql://...&characterSetResults=utf8&characterEncoding=utf-8"/>
- 表定义需要说
CHARACTER SET utf8
(或 utf8mb4)。做SHOW CREATE TABLE
. - html输出需要
<meta charset=utf-8" />
. - 如果数据来自 HTML 表单:
<form accept-charset="UTF-8">
关于java - mysql character_set_results 没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533777/