无效的字符串值:'。xD0 ....“表示列....”。 utf8字符集尝试使用

时间:2018-06-21 22:13:07

标签: java mysql spring utf-8

在春季项目中,我尝试将字符引入数据库。但是数据库没有对它进行编码。

我使用扩展的JpaRepository接口,方法save(T t),并且在发送英文文本时一切正常;

当程序尝试用西里尔字母保存实体时,我为列...得到了异常“无效的字符串值:'\ xD0 \ xA5 \ xD0 \ xB0 \ xD0 \ xB1 ...”。 / p>

因此编码不起作用。

我的数据库字符变量:

enter image description here

application.properties:

launchMode=cli

#Database settings
spring.datasource.url=jdbc:mysql://localhost:3306/mySecondBD?serverTimezone=UTC
spring.jpa.hibernate.ddl-auto=update
spring.datasource.username=root
spring.datasource.password=password
#spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;
spring.datasource.sql-script-encoding=UTF-8

问题:

我还需要在哪里设置字符集编码参数?

4 个答案:

答案 0 :(得分:1)

编辑属性:

spring.datasource.url=jdbc:mysql://localhost:3306/mySecondBD?useUnicode=yes&characterEncoding=UTF-8

检查您的变量:

mysql> show variables like 'char%';

编辑my.cnf:

vi /etc/my.cnf

[client]
default-character-set=utf8

最后,您重新检查MySQL变量并确认查询结果。

答案 1 :(得分:1)

十六进制D0A5D0B0D0B1是西里尔字母Хаб的UTF-8编码。因此,使用MySQL的utf8(或utf8mb4)应该可以。

您说'\ xD0 \ xA5 \ xD0 \ xB0 \ xD0 \ xB1 ..."时,您有多余的空格;它们在您看到的输出中吗?

请提供SHOW CREATE TABLE page

以某种方式,您需要说 client 编码是utf8。一种方法(在春季)是将其放入application.yml

 datasource:
     connectionInitSql: "SET NAMES 'utf8'"

答案 2 :(得分:1)

使用此查询,它对我有用... ALTER TABLE table_name修改列column_name varchar(255)
     字符集utf8集合utf8_general_ci;

答案 3 :(得分:0)

总而言之,我将进行下一步和所有运行:

  • 编辑application.properties,我的建议

    spring.datasource.url = jdbc:mysql:// localhost:3306 / mySecondBD?useUnicode = yes&characterEncoding = UTF-8

  • 更改了我的表编码属性(不仅是数据库):

    ALTER TABLE页面的字符集utf8 COLLATE utf8_general_ci; ALTER TABLE页面转换为字符集utf8 COLLATE utf8_general_ci;

  • ,然后将变量列更改为文本:

    更改TABLE页面修改内容TEXT(21844);

数据库的PS变量:

onComplete