微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Spring应用程序中使用嵌入式数据库MariaDB为数据库和表指定utf8编码?

如何解决如何在Spring应用程序中使用嵌入式数据库MariaDB为数据库和表指定utf8编码?

开发Web应用程序我想使用嵌入式数据库来存储数据。但是,我不想使用建议的内存数据库,而是更喜欢使用自定义数据库。我的选择是MariaDB。我在this文章中被裁定如何在我的项目中将MariaDB作为嵌入式数据库,一切正常,出现数据库,但有一件事情:我无法更改表值的编码。

我试图在application.yml文件中设置其他应用程序属性,试图使用指定编码参数来完成连接字符串,但不幸的是,所有这些东西都没有起作用:( 你们中的任何人都曾经遇到过这样的问题,可以为我提供帮助吗?预先谢谢你!

我当前的application.yml是:

mariaDB4j:
  dataDir: ./localMariaDB
  port: 3307
  databaseName: embeddedDB
spring:
  datasource:
    url: jdbc:mariaDB://localhost:3307/
    username: root
    password:
    driver-class-name: org.mariadb.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MysqL5InnoDBDialect
    hibernate:
      ddl-auto: create

最后我得到了异常吼叫:

Caused by: java.sql.sqlException: Incorrect string value: '\xD0\x92 \xD1\x80\xD0...' for column 'current_status' at row 1
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1688) ~[mariadb-java-client-2.6.2.jar:na]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1550) ~[mariadb-java-client-2.6.2.jar:na]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1513) ~[mariadb-java-client-2.6.2.jar:na]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318) ~[mariadb-java-client-2.6.2.jar:na]
... 121 common frames omitted

顺便说一句,当我运行应用程序时,得到的连接字符串看起来像jdbc:MysqL://localhost:3307/embeddedDB。 我很困惑为什么没有:MysqL:而不是我的连接属性中指定的:mariadb:。它对我的数据库行为有影响吗?

解决方法

所以,我找到了解决我问题的方法。 它看起来像往常一样非常简单:) 要更改MariaDB提出的标准字符编码,我必须在设置MariaDB的DataSource之前指定其他配置属性。 由于this源提供了将MariaDBSpringService实体配置为在DataSource配置中进一步使用的功能,因此有必要使用一些字符编码描述工具来扩展它(MariaDBSpringService)。因此,要指定自定义编码(即更改标准编码),我已将以下代码行添加到MariaDBSpringService bean中:

service.getConfiguration().addArg("--character-set-server=utf8mb4");
service.getConfiguration().addArg("--collation-server=utf8mb4_general_ci");

通常,完整的bean声明如下:

@Bean
public MariaDB4jSpringService mariaDB4jSpringService(){
    MariaDB4jSpringService service = new MariaDB4jSpringService();
    service.getConfiguration().addArg("--character-set-server=utf8mb4");
    service.getConfiguration().addArg("--collation-server=utf8mb4_general_ci");
    return service;
}

希望,这将对某人有所帮助,他们可能还会面临此类问题)) 感谢所有试图帮助我的人!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。