php - 连接和转义字符后输出不完整

标签 php mysql escaping concatenation 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

据我所知,我应该正确地转义了这些字符。 有什么建议吗?

最佳答案

这不是转义或 php 代码的问题,这是添加到分组机制功能的 mysql 服务器限制,例如 group_concat。

有关更多信息,请阅读手册:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_group_concat_max_len

您可以为此查询或全局更改此 sys_option,但在数据库端对如此多的数据进行分组不是一个好主意。

关于php - 连接和转义字符后输出不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237960/

相关文章:

c++ - 有没有办法逃避 C 预处理器指令?

php - 为用户启用黑名单的最佳方式

php - MySQL中使用条件语句定义变量

PHP:虽然循环只运行一次,但应该运行多次

mysql - 从单个表获取 MAX、MIN、SUM、AVERAGE 并创建报告

mysql - 将变量从 PHP 脚本传递到过程 Mysql

php - Mysql 不允许在调用时显示表

php - 通过 PHP 在屏幕上运行并接收命令

php - 用于 javascript 的 magento 转义字符串

javascript - jquery 验证插件中的转义点