0 说明
系统为了兼容emoji表情以及其他特殊符号,在数据传入时使用urlencode()函数处理了一下数据,并将处理后的数据保存到content字段,将原字符串存到content_bak字段,使用时将content字段先urldecode()一下,然后将整组数据json_encode()之后返回给前台。
1 发现
接口一直没有任何数据返回,但http状态码为200
2 排错
1.超出了nginx返回长度限制?
不对,因为直接使用var_dump()数组的时候是可以输出的,此输出也是nginx返回的。
2.发现json_encode()数组之后返回false
调试,使用json_last_error()函数获取错误码为5即对应为JSON_ERROR_UTF8,说明数据里有非utf8的字符,是传入了一些不正常的字符吗?但就算不正常的字符也会被urlencode()然后存起来,所以应该不是数据内容有错误。
3.发现json_encode()之前的数组里有特殊的字符�,在对比content_bak数据看,原因基本已经确定。
因为content,content_bak这两个字段是使用TEXT(MySql)存的,由于此次数据非常长urlencode()之后,长度早已超出TEXT的最长长度65535,所以只存到了urlencode()之后字符串的第65535位置,截取了半个字符,所以在json_encode()时出现了JSON_ERROR_UTF8这种错误。
3 解决
修改字段类型就可以了从TEXT改为参照下表

MySql中TEXT的种类
