在春季项目中,我尝试将
我使用扩展的JpaRepository接口,方法save(T t),并且在发送英文文本时一切正常;
当程序尝试用西里尔字母保存实体时,我为列...得到了异常“无效的字符串值:'\ xD0 \ xA5 \ xD0 \ xB0 \ xD0 \ xB1 ...”。 / p>
因此编码不起作用。
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
答案 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