最近遇到一个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%' |
最后必须要达到下面的设置:
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. 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