慕運(yùn)維8079593
2021-09-03 13:03:57
我們在使用 Hibernate 使用 Base64 編碼后將字符串保存在 MySQL DB 中。以下是執(zhí)行此操作的代碼: @Basic @Column(name = "name", nullable = false) @ColumnTransformer(read = "FROM_BASE64(name) ", write ="TO_BASE64(?)") public String getName()現(xiàn)在,當(dāng)我保存rotebühlstr 時,它會以cm90ZWLDvGhsc3Ry 的形式保存在數(shù)據(jù)庫中。當(dāng)我在終端上打印它時,它顯示為rotebühlstr,而它應(yīng)該是rotebühlstr這是一個dropwizard項(xiàng)目,mysql連接的config.yaml如下: properties: charSet: UTF-8 characterEncoding: UTF-8 useUnicode: true hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect hibernate.jdbc.batch_size: 100 hibernate.envers.audit_table_suffix: "_aud" hibernate.id.new_generator_mappings: falseMySQL 列描述:namevarchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, mysql> show variables like 'character_set_%'; +--------------------------+--------------------------------------- --------------------+ | Variable_name | Value | +--------------------------+--------------------------------------- --------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 觀察:在我同事的本地設(shè)置中,這工作正常。在那里,java/hibernate 正在處理 latin1 而不是 UTF-8 中的輸入字符串。因此,rotebühlstr在 DB 中編碼為cm90ZWL8aGxzdHI=并正確解碼為rotebühlstr。^這是由于 character_set_server 的差異而發(fā)生的。它在我的本地設(shè)置為 latin1,在同事本地設(shè)置為 utf-8。到目前為止我們嘗試過的:嘗試將“接受字符集”作為 latin1 發(fā)送。沒用。修改 config.yaml 文件以更改 mysql 的字符集設(shè)置。沒用我現(xiàn)在可以做什么:我可以編寫一個用于編碼和解碼的包裝層并停止使用@ColumnTransformer。這樣問題就可以解決了。
2 回答

ibeautiful
TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個贊
它適用于您的同事,但不適用于您的終端,因?yàn)槟呐c latin1 字符集連接,即使數(shù)據(jù)庫和字段可能在 utf8mb4 中。
您想找到您的 mysql 配置并在它們的部分中添加這些選項(xiàng)。如果它們丟失,則創(chuàng)建這些部分。
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
退出任何客戶端,重新啟動服務(wù)器,你應(yīng)該沒問題。同樣從現(xiàn)在開始,當(dāng)你執(zhí)行 ashow create database或者show create table你會看到它是錯誤的編碼。

喵喵時光機(jī)
TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個贊
我有一次遇到字符集問題,唯一可以解決問題的字符集是 utf8mb4。我記得問題出在 utf8 不能支持某些字符。
添加回答
舉報
0/150
提交
取消