簡體   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