串联和转义字符后输出不完整

时间:2018-09-08 17:59:06

标签: php mysql escaping concat group-concat

我有一个在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输出的屏幕截图: enter image description here

我也计算了一下,确切地每一行都有 345个字符,并且在同一点中断。这似乎不是巧合:

enter image description here

从我看到的内容中,我应该正确地转义了字符。 有什么建议吗?

1 个答案:

答案 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,但是将如此多的数据分组到数据库侧并不是一个好主意。