【发布时间】:2014-07-20 06:56:39
【问题描述】:
我将图像 URL 的数组编码为 json 字符串并将它们存储在数据库中。 (utf8_general_ci)。
当我将数据插入表中并检索它时,json_decode() 能够对其进行解码。
但是,当我将数据从一个表复制到另一个表(INSERT INTO ... SELECT 语句)时,从数据库检索后的数据无法再解码。
相反,我得到损坏的 json ENCoded 字符串。即使是空数组[] 也无法正确解码。
它从http://pl.tinypic.com/r/fwoiol/8 转换而来 转入http://pl.tinypic.com/r/bgea05/8
(必须制作图像,因为这些方块无法复制为文本)。
编辑,在检查了更多之后,我尝试对数据库中的两个字符串进行 bin2hex()。
两者似乎完全相同。
但是,一个解码,一个不解码。
5b22687474703a5c2f5c2f7777772e
changes into
0022687474703a5c2f5c2f7777772e
因此,json_decode 仅将字符串中的 5b 更改为 00。
好像它在某处丢失了编码?
编辑 2
static public function jsonDecodeFieldsArray($entries, $fields = array('features','images')){
foreach($entries as $key => $entry){
$entries[$key] = self::jsonDecodeFields($entry, $fields);
}
return $entries;
}
static public function jsonDecodeFields($entry, $fields = array('features','images')){
foreach($fields as $field){
if(isset($entry[$field])){
$entry[$field] = json_decode((string) $entry[$field], true);
}
}
return $entry;
}
我正在使用上面的代码来解码 $fields 指定的数组键。但是,它不仅解码错误。但也会影响 $fields 中未列出的键。破坏他们的编码。
更多内容待补充。如果我不使用这些函数并且仅在字段 json_decode($array[0][images], true) 上使用 json_decode 它工作正常。
【问题讨论】:
-
将代码示例缩进 4 个空格以获得正确显示括号的代码格式。
-
我没有提供任何代码示例
-
这似乎是排序规则冲突的问题。两列的排序规则是否匹配?
-
确实如此。两者都相同(utf8_general_ci)
-
我觉得我发现了问题,要做一些测试
标签: php mysql json select-insert