一切福田,不離方寸,從心而覓,感無不通。

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

最近遇到一个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

通过下面步骤完美解决:

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

1
show variables like 'character%'

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

from clipboard

二、更改数据库编码

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

三、更改所有表和列编码

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

1
2
3
4
5
6
7
8
9
10
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,你的配置可能不叫这个句子。

修改为如下配置:

1
2
3
4
5
6
7
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
collation-server = utf8mb4_general_ci
character-set-server = utf8mb4

更改之后重启mysql

五、修改数据库连接

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

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

如下:

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

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

 

from:https://lesg.cn/Article-53016.html