java - mysql character_set_results 没有改变

标签 java mysql hibernate utf-8

我在使用 mysql 和 hibernate 时遇到了所有其他语言的问题,然后是英语。尽管语言是 utf8(希伯来语),但我收到异常说明该语言不是 utf8。

我运行了 show variables like '%character%'; 这就是我得到的结果:

enter image description here

我想也许是 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_results 为空值

最佳答案

我不认为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/

相关文章:

java - 空对象引用上的 android.app.ActivityThread.getApplicationThread()'

java - Hibernate OneToOne 之间具有惰性行为的 PK

java - 为什么我在使用 hibernate.hbm2ddl.auto 和 H2 时遇到异常,但使用 PostgreSQL 却可以正常工作?

mysql - 哪里可以找到 Magento 数据库

java - Spring Boot JSON解析错误: Cannot deserialize error

java - Hibernate 管理 @ManyToMany 表插入和订单

Java Properties.load() - 如何切换键值对?

java - Spring Roo 的替代用法

java - 在java中解析一个复数

mysql - 在mysql上运行common "alter table"命令返回 "no database selected"错误