解决mysql报错误 0x80004005 Incorrect string value: '\xF0\xA0\x83\x8A2\xE4...' for column

解决mysql报错误 0x80004005 Incorrect string value: '\xF0\xA0\x83\x8A2\xE4...' for column

213发表于2019-09-23

最近遇到一个mysql生产问题,一直报:报错误 0x80004005  Incorrect string value: '\xF0\xA0\x83\x8A2\xE4...' for column

经过排查原来数据库和表都是默认utf8编码,老司机都知道,mysql中的utf8编码有一个大坑,不是真正的utf8。当遇到特殊字符就会插入失败报下面的错误:

MySql.Data.MySqlClient.MySqlException (0x80004005): Incorrect string value: '\xF0\xA0\x83\x8A2\xE4...' for column


使用环境:

1、asp.net core 2.2

2、dapper

3、mysql8

通过下面步骤完美解决:

一、首先查看当前数据库编码

show variables like 'character%'

最后必须要达到下面的设置:

from clipboard

二、更改数据库编码

ALTER DATABASE 数据库名称  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

三、更改所有表和列编码

先生成所有表的更改语句,这样可以批量mysql所有表和列编码为utf8mb4

SELECT
    CONCAT(
        'ALTER TABLE ',
        TABLE_NAME,
        ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
    )
FROM
    information_schema.`TABLES`
WHERE
    TABLE_SCHEMA ='数据库名称';


把上面查询结果导出,执行就行了。

四、更改数据库配置


数据库配置my.ini或my.cnf,你的配置可能不叫这个句子。
修改为如下配置:
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_general_ci
character-set-server = utf8mb4

更改之后重启mysql


五、修改数据库连接

经过上面4步骤,以为就万事大吉了。

注意:一定要修改程序的数据库连接,不然照样报错。

如下:

Host=localhost;Port=3306;Database=lanhu;Uid=www.lanhusoft.com;pwd=lanhusoft;Charset=utf8mb4;

之前我们写成utf8都不行,一定要写成utf8mb4



小编蓝狐