php 反序列化报错及解决
来源:互联网 发布:广州数控g73编程实例 编辑:程序博客网 时间:2024/06/10 21:41
业务逻辑:把从通过程序编辑的一个多维数组,通过序列化为一个字符串,储存到Mysql数据库中。
问题:在编辑完数组后,序列化完毕并保存到数组中,这些都很顺利,问题出在反序列化的时候,
问题提示是:
unserialize-error-at-offset-5-of-9-bytes
尝试1,试了试以前导入进去的数据,反序列化并没有问题。
尝试2,数据库编码与php文件编码不一致,重新设置了php文件编码为utf8,与数据库保持一致,测试,问题没有解决。
尝试3,百度下,有哥们数把数据库保存的类型 由 varchar 改为 text 问题解决了,看了下数据库类型 是longtext类型,没有问题。
尝试4,试着对比以前的数据,发现有一些数据是识别不了的,仔细查了查,原来这些是表情符号,猜想可能是反序列化的时候
解析不了这些表情符号,所以返回的布尔值。然后把数据库字段类型的字符集从utf8改为utf8mb4,再重新编辑数组,序列化数据,
添加数据,反序列化,这次没问题了,解决了。
原因:是因为新增的数据有了表情符号,而数据库的类型是utf8在储存的时候不能解析表情,最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。
三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,
都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),
和很多不常用的汉字,以及任何新增的 Unicode 字符等等。
这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode,它能够处理Emoji 表情。
从MYSQL5.5开始,才可支持4个字节UTF编码utf8mb4。
- php 反序列化报错及解决
- php unserialize反序列化报错问题
- php常见问题及解决
- php 反序列化
- php反序列化
- Lua中实现php序列化及反序列化函数
- PHP session文件锁住及解决
- php文件锁详解及解决实例
- php面向对象(四),类自动加载,对象克隆和遍历及序列化反序列化
- php中使用setcookie出现的问题及解决
- PHP程序和MySql数据乱码问题原因及解决
- FCKeditor2.6.7 for PHP配置及中文上传乱码解决
- zend framework Bootstrap.php数据库适配器配置及错误解决
- PHP笔记之二-strlen、include及乱码的解决
- php使用DomPDF时遇到的问题及解决…
- 手机访问本地php项目遇到的问题及解决
- MySQL 存储php中json_encode格式中文问题及解决
- Windows下的PHP开发环境配置及常见问题解决
- 【leetcode】 83. Remove Duplicates from Sorted List(easy)
- -bash: /usr/java/jdk1.7.0_55//bin/java: /lib/ld-linux.so.2: bad ELF interpr
- Redis通用命令
- centOS安装Nodejs
- 选择排序原理(java实现)
- php 反序列化报错及解决
- 洛谷 1346 电车
- Elasticsearch的简单使用案例
- 博客新皮肤上线啦!
- PIL在windows和Ubuntu下的安装--pip安装方式
- ajax 重复提交
- shellcode启动cmd加退出进程和写保护
- 常见的类型转换
- 自建邮件服务器,你玩过吗?