解决【Incorrect string value: '\\xF0\\x9F\\x8F\\x86' for column ...】
463
2018-09-15
项目中程序(Java、Spring)和数据库(MySQL)原本使用都是UTF-8的编码,在插入【emoji表情字符】时出现了标题中的错误信息。解决方法如下
修改 MySQL 配置
修改 MySQL 配置文件,添加以下内容
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改表的字符集
同时修改表的字符集信息
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;
修改程序中的字符集
程序的数据库链接字符串中不要写characterEncoding=utf8
,否则会不适用utf8mb4字符集。
Spring的数据源配置中如下
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://${${data-source.prefix}.data-source.host-name}:3306/${${data-source.prefix}.data-source.db-name}?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true" />
<property name="username" value="${${data-source.prefix}.data-source.username}" />
<property name="password" value="${${data-source.prefix}.data-source.password}" />
<property name="maxActive" value="150" />
<property name="maxIdle" value="2" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="select 1" />
<!-- 此配置用于在创建Connection对象时执行指定的初始化sql -->
<property name="connectionInitSqls">
<list>
<value>set names 'utf8mb4'</value>
</list>
</property>
</bean>
参考
mysql中Incorrect string value乱码问题解决方案
该错误的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
- 0
- 0
-
分享