我想通过我的Web应用程序插入MySQL数据库信息。我在TomEE服务器上通过OpenJPA来完成 例如:
public void addLecturer(String name, String surname) {
Lecturer lect = new Lecturer(name,surname);
em.persist(lect);
}
其中Lecturer是实体类。问题是应用程序以latin1编码插入数据。我想以UTF-8编码插入它。
当我在命令行终端中通过简单的MySQL命令插入数据时,我获得UTF-8编码的信息。
我看过这个,我看到character_set_server被设置为latin1,但我不知道这是问题还是如何改变它:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
修改
我有同样的问题:
JPA utf-8 characters not persisted
和
UTF - 8 with JPA and Glassfish 4.0
我将useUnicode=yes
,characterEncoding=utf8
和characterSetResults=utf8
添加到我的媒体资源javax.persistence.jdbc.url
,但它没有帮助。
答案 0 :(得分:7)
好的,我找到了决心:
我通过JTA获取数据,因此我从persistence.xml
中定义的数据源获取tomee.xml
的数据:
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<Resource id="database" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:11080/db?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&characterSetResults=utf8
UserName my
Password pass
</Resource>
</tomee>
所以我必须在&characterEncoding=utf8&characterSetResults=utf8
文件中添加JdbcUrl
到tomee.xml
参数(请注意,对于有效的xml,我必须使用&
而不是&
) 。我不必将此信息添加到persistence.xml
(仅因为我使用JTA)。
现在一切都很好。感谢 arievanwi 让我直接解决问题。
答案 1 :(得分:6)
将查询字符串附加到jdbc url
?characterEncoding=utf-8
在表
上运行以下sql命令ALTER TABLE <tablename> CONVERT TO CHARACTER SET utf8 COLLATE
utf8_unicode_ci;
答案 2 :(得分:2)
我不认为这与你的应用程序,容器等有任何关系,除非你的例子中name
和surname
的值已经错了(我不知道)假设)。因此,确实可能是由于编码设置。您是否检查了this post中提供的信息?
答案 3 :(得分:0)
你的是一个Web应用程序吗?如果是,请检查您的应用程序服务器是否配置为处理UTF-8请求。例如,在tomcat中,可以在Connector部分的server.xml中完成。
答案 4 :(得分:0)
为了正确实现unicode并支持许多不同的语言,您需要2个配置:
Mysql表或数据库架构应该支持utf8
CREATE SCHEMA mytestdb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
ALTER TABLE myTableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
现在你需要正确的JDBC url并指定utf-8字符集,记得要转义任何特殊字符,如下所示:
spring.datasource.url=jdbc\:mysql\://localhost\:3306/${SERVER_DB_NAME}\?useUnicode=true\&characterEncoding=utf\-8\&characterSetResults=utf\-8
这就是我实施它并为我工作的方式。