1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql插入数据时报错:Incorrect string value:‘\xF0\x9F\x98\x84‘ for column xx

mysql插入数据时报错:Incorrect string value:‘\xF0\x9F\x98\x84‘ for column xx

时间:2023-04-01 16:12:18

相关推荐

mysql插入数据时报错:Incorrect string value:‘\xF0\x9F\x98\x84‘ for column xx

Incorrect string value:‘\xF0\x9F\x98\x84’ for column xx

这个问题是由于mysql的编码问题引起的,正常的汉字一般不会超过3个字节,数据中存在emoj表情等特殊字符,这对应UTF-8编码格式中的4字节编码,所以报错。

解决方案:

1)使用utf8mb4数据类型

如果MySql版本低于5.5.3,首先要进行版本升级

修改mysql配置文件,设置默认字符集utf8mb4, 包括collation

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect=’SET NAMES utf8mb4’

重启mysql,

mysql> SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’;

效果如下图所示:

+————————————-+——————————+

| Variable_name | Value |

+————————————-+——————————+

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| collation_connection | utf8mb4_unicode_ci |

| collation_database | utf8mb4_unicode_ci |

| collation_server | utf8mb4_unicode_ci |

+————————————-+——————————-+

然后把库和字段的编码都改为下图所示:

修改数据表的编码为utf8mb4:

执行命令:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4;

最后:数据库连接加上 characterEncoding=utf8mb4

2)自定义过滤规则,将文本中出现的四字节UTF-8字符过滤或转化为自定义类型。

下面是将4字节字符转化为0000的测试例子。

for (int i = 0; i < b_text.length; i++)

{

if((b_text[i] & 0xF8)== 0xF0){

for (int j = 0; j < 4; j++) {

b_text[i+j]=0x30;

}

i+=3;

}

}

注意:如果mysql的配置不修改。仅仅修改库和字段的编码,用navicat可以成功插入数据,但是使用jdbc连接插入时依旧会报错,所以想要彻底解决这个问题,还是要修改mysql的编码。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。