gpt4 book ai didi

java - 双编码 UTF-8 字符串 - MySql、Hibernate

转载 作者:行者123 更新时间:2023-11-29 02:11:06 24 4
gpt4 key购买 nike

我们在 hibernate 时使用 Base64 编码后将字符串保存在 MySQL 数据库中。

下面是执行此操作的代码:

    @Basic
@Column(name = "name", nullable = false)
@ColumnTransformer(read = "FROM_BASE64(name) ", write ="TO_BASE64(?)")
public String getName()

现在,当我保存 rotebühlstr 时,它会在数据库中保存为 cm90ZWLDvGhsc3Ry。当我在终端上打印它时,它显示为 rotebühlstr 而它应该是 rotebühlstr

这是一个dropwizard项目,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: false

MySQL 列描述:name varchar(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
|
| character_set_filesystem | binary
|
| character_set_results | utf8mb4
|
| character_set_server | latin1
|
| character_set_system | utf8
|
| character_sets_dir | /usr/local/mysql-5.7.23-macos10.13-
x86_64/share/charsets/ |
+--------------------------+---------------------------------------
--------------------+
8 rows in set (0.01 sec)

观察:

In my colleague's local set up, this is working fine. There, java/hibernate is treating input string in latin1 and not in UTF-8. so, rotebühlstr is encoded in DB as cm90ZWL8aGxzdHI= and decoded correctly as rotebühlstr.

^这是因为 character_set_server 的不同而发生的。它在我的本地设置为 latin1,在同事的本地设置为 utf-8。

到目前为止我们尝试了什么:

  • 尝试将“Accept-Charset”作为 latin1 发送。没用。
  • 修改了 config.yaml 文件以更改 mysql 的字符集设置。没有工作

我现在能做什么:

我可能会写一个用于编码和解码的包装层并停止使用@ColumnTransformer。这样问题就可以解决了。

谢谢。

最佳答案

有一次我遇到了字符集问题,唯一可以解决问题的字符集是 utf8mb4。我记得问题出在 utf8 不能支持某些字符。

此外,有关更多信息,您可以查看https://stackoverflow.com/a/43692337/2137378也。

关于java - 双编码 UTF-8 字符串 - MySql、Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52203592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com