我有一个在MySQL上完成连接值的字符串,如下所示:
CONCAT("[\"",GROUP_CONCAT(DISTINCT(concat_ws("=>",val_1, val_2,val_3)) ORDER BY val_4 DESC SEPARATOR "\",\""),"\"]")
我注意到从var_dump
看来,每一行的输出似乎不完整:
"["CONFECTIONERY=>BISCUITS=>CRACKERS",
"CONFECTIONERY=>BISCUITS=>COOKIES",
"ORIENTAL GROCERY=>KOREAN GROCERY=>KOREAN FOOD (DRY, PACKET)",
"BEVERAGE=>COFFEE=>PREMIX COFFEE POWDER",
"CLEANING AGENT & PEST CONTROL=>LAUNDRY=>LAUNDRY LIQUID",
"CLEANING AGENT & PEST CONTROL=>LAUNDRY=>LAUNDRY POWDER",
"BEVERAGE=>TEA=>WESTERN TEA",
"CEREAL & SPREADS=>CEREAL=>"
它缺少结尾的方括号以及=>字符之后的第三个元素。并且其他线路在同一位置中断。
如果我尝试在PHP中json_decode
,则输出 NULL 可能是由于编码不正确,因为最长的行(超过345个字符)被剪切掉了。
还是与字符串的长度有关的问题?因为我注意到它们很长,并且它们在与字符相同的位置处中断。请参见下面的mysqlworkbench输出的屏幕截图:
我也计算了一下,确切地每一行都有 345个字符,并且在同一点中断。这似乎不是巧合:
从我看到的内容中,我应该正确地转义了字符。 有什么建议吗?
答案 0 :(得分:0)
在转义或php代码方面没有问题,在本例group_concat中,这是对分组机制功能添加的mysql服务器限制。
有关更多信息,请阅读手册:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_group_concat_max_len
您可以为此查询或全局更改此sys_option,但是将如此多的数据分组到数据库侧并不是一个好主意。