加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect strin

发布时间:2020-12-25 10:30:40 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法》要点: 本文介绍了MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法,希望对您有用。如果有疑问,可以联系我们。 我们网站原来用

《MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法》要点:
本文介绍了MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法,希望对您有用。如果有疑问,可以联系我们。

我们网站原来用的是UTF8,但是发现不少访问者会使用特殊字符,在保存时,MYSQL就会出现:

Incorrect string value: xF0x9Fx92x90..... 


我们用的编程之家PHP MVC框架,可以在日志中看到要保存的原始内容,审核了日志后发现应该是几个特殊字符导致的保存失败。

问题解决方法:

只要把表格设置成utf8mb4即可。不能再用utf8了。


系统解决需要做以下几方面:

1、在my.cnf中添加选项:

2、修改数据库的表格编码选项。

3、PHP在查询MYSQL时的编码指定。


以上三方面,我们详细说明:


一、在my.cnf中添加选项:

[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'


上面最后一行 init_connect='SET NAMES utf8mb4' 可以不用设置。如果你的PHP中查询有执行它就可以了。


2、修改数据库的表格编码选项。

即修改每个数据库的表格创建选项,分别从数据库、表格、字段三部份的编码修改(字段可以不用处理)。

A、数据库编码:

ALTER DATABASE `your_db_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; 


B、表格编码:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 


C、字段编码(非必须,可不必执行):

这里若要执行,只需要修改字符字段即可:

ALTER TABLE `table_name` CHANGE `column_name` `column_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


然后,

你的PHP在每次执行时,先执行一次 'SET NAMES utf8mb4' 即可。


这个问题务必注意,特别是对保存一些社交帐号的数据库,比如微信号昵称

utf8mb4编码是MySQL 5.5.3版本后增加了的,其中的mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

utf8mb4是utf8的超集,原来使用utf8字符集的,修改为utf8mb4的不会对原有的utf8编码读取产生任何问题。


保存微信用户信息时,如果用户昵称带有emoji表情符的,就要用utf8mb4编码,否则会出现保存错误。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读