《MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法》要点:
本文介绍了MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect string value ...解决方法,希望对您有用。如果有疑问,可以联系我们。
相关主题:MYSQL安装和配置
我们网站原来用的是UTF8,但是发现不少访问者会使用特殊字符,在保存时,MYSQL就会出现:
Incorrect string value: \xF0\x9F\x92\x90.....
我们用的维易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编码,否则会出现保存错误。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/151.html