繁体   English   中英

无法将字符串 '\xAC\xED\x00\x05~r...' 从二进制转换为 utf8mb3

[英]Cannot convert string '\xAC\xED\x00\x05~r...' from binary to utf8mb3

每当我运行这段代码时,我都会遇到异常:

StringBuilder sqlQuery = new StringBuilder("SELECT this_.id as id, this_.number_of_hours as number_of_hours, this_.date_start as date_start, this_.date_end as date_end, this_.date_created as date_created, this_.obsolete as obsolete FROM (");
sqlQuery.append(" select tt.* from employee_tracking tt ")
        .append(" inner join contract c on tt.contract_id=c.id ")
        .append(" where tt.obsolete = :OBSOLETE ");
    
// UNION
sqlQuery.append(" UNION ");

sqlQuery.append(" select tt_.* from employee_tracking tt_ ")
        .append(" inner join contract_extension ce_ on tt_.contract_extension_id=ce_.id ")
        .append(" where tt_.obsolete = :OBSOLETE ");
    
sqlQuery.append(") AS this_ ORDER BY id ASC ");


SQLQuery query = getSessionFactory().getCurrentSession().createSQLQuery(sqlQuery.toString());
query.setParameter("OBSOLETE", 0);
    
query.addEntity(EmployeeTracking.class);

List lst = query.list();

异常堆栈跟踪:

WARN  SqlExceptionHelper - SQL Error: 3854, SQLState: HY000
ERROR SqlExceptionHelper - Cannot convert string '\xAC\xED\x00\x05~r...' from binary to utf8mb3

这是我的服务器字符集配置:

mysql> use lambda;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb3            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8mb3            |
| collation_connection     | utf8mb4_0900_ai_ci |
| collation_database       | utf8_danish_ci     |
| collation_server         | utf8mb4_0900_ai_ci |
+--------------------------+--------------------+
10 rows in set (0,00 sec)

mysql> SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
    -> WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "lambda" AND T.table_name = "employee_tracking";
+--------------------+
| CHARACTER_SET_NAME |
+--------------------+
| utf8mb4            |
+--------------------+
1 row in set (0,01 sec)

我的 jdbcUrl:

jdbc:mysql://localhost:3306/lambda?jdbcCompliantTruncation=false&serverTimezone=Europe/Berlin&allowPublicKeyRetrieval=true&useSSL=false&zeroDateTimeBehavior=round

我正在使用以下 MySQL 服务器版本:

~ % /usr/local/mysql/bin/mysql --version   
/usr/local/mysql/bin/mysql  Ver 8.0.27 for macos11 on x86_64 (MySQL Community Server - GPL)

请提供任何帮助,我们将不胜感激。

似乎您的“OBSOLETE”作为 Serealized 而不是 String 传递,因为它是 Object,在数据库中保存为 String。 尝试通过传递此参数来使用简单的“toString()”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM