MYSQL保存特殊字符失败,用编码utf8mb4解决错误 Incorrect strin
《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编码,否则会出现保存错误。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |