mysql - 如何使用 Spring 和 MySQL 配置 Wildfly 以支持 unicode 表情符号?
问题描述
我知道已经有很多类似的问题,但没有一个能解决我的问题。我想简单地将表情符号保存到数据库中。请求以正确的格式正确地到达服务器,但数据库只保存问号而不是表情符号。如果我直接用 mysql 查询插入表情符号,它就可以工作。Wildfly 已正确连接到数据库。我做了以下步骤:
- 在 MySQL 中,我执行了这个查询:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
表的排序规则都是utf8mb4_unicode_ci
- 我使用 JNDI 连接到数据库。Wildfly中的数据源连接url:
jdbc:mysql://mydomain/mydb?useUnicode=yes
也试过:jdbc:mysql://mydomain/mydb?useUnicode=true&useEncoding=true&character_set_server=utf8mb4
和:jdbc:mysql://mydomain/mydb?useUnicode=true&useEncoding=true&characterEncoding=UTF-8&character_set_server=utf8mb4
- 在 Spring 中,配置部分是:
<property name="jpaProperties"> <props> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.connection.CharSet">utf8mb4</prop> <prop key="hibernate.connection.characterEncoding">utf8mb4</prop> <prop key="hibernate.connection.useUnicode">true</prop> </props> </property>
- 我使用 mysql-connector 的 8.0.11 版本。Wildfly 版本:11.0。MySQL 版本:5.7.22
我不知道我还应该做些什么才能让它发挥作用。现在是 2018 年,默认情况下仍然无法正常工作。疯狂的。任何建议将不胜感激。
解决方案
解决方案是修改/etc/my.cnf MySQL 配置文件,几乎如下所述:
但是有了这两行:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
使用 utf8mb4 而不是 utf8 很重要。
这个问题可能是重复的,但也许值得把它留在这里,以帮助那些认为他们像我一样尝试过所有事情并且有类似情况的人。
推荐阅读
- visual-studio - 基于.net core和visual studio 2017中不同环境的不同(转换后的)JenkinsFile(或实际上的任何文件)
- php - 带有 PhpWord 的隐蔽 HTML:错误 - DOMDocument::loadXML(): 实体中未定义 p 上的命名空间前缀 o
- c# - 将泛型类列表序列化为字节数组
- java - 如何创建一个随机函数来避免用户编写字符串
- sql - SQL Server 2008 R2 在特定条件下选择特定行
- java - 如何通过索引获取 Firebase 的值?
- node.js - 将 S3 对象的完全控制权交给另一个帐户
- python - 我什么时候必须使用 TensorFlow 的 FileWriter.flush() 方法?
- laravel - 有没有一种优雅的方法来参数化 Laravel 中的 Bootstrap 模态?
- go - Golang 存储打印为变量