0

php关联数组中的值字符串有限制吗?

GROUP_CONCAT我有一个查询,它为数组元素返回值为CSV 的值。当我直接运行查询时,我看到所有值都被返回。当我在 PHP 中打印数组时,字符串被截断。

不知道如何绕过它?有任何想法吗?

更多信息:我只是 var_dump 从查询中得到的结果。这里是。它显示 1024。看起来有一个限制。它是什么?

  array(5) {
   ["FIELD_ID"]=>
      string(3) "232"
   ["answers"]=>
      string(1024) "48,50,52,54,56,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,"
     ["ANSWER_TYPE"]=>
     string(2) "SS"
   ["FIELD_TYPE"]=>
     string(2) "DA"
   ["main_field_name"]=>
    string(0) ""
  }

更多信息:即使将变量设置group_concat_max_len为 5000,问题仍然存在。还有其他想法吗?PDO有什么问题吗?

重新启动 MySQL 后,它可以工作了。谢谢!

4

3 回答 3

1

您可能需要在此处阅读 max concat 的长度。

命令行格式 --group_concat_max_len=#
选项文件格式 group_concat_max_len
选项设置变量 Yes, group_concat_max_len
变量名 group_concat_max_len
变量范围全局,会话

动态变量 是
  -- 允许值
平台位大小 32
键入数字
默认 1024
范围 4 .. 4294967295

  -- 允许值
平台位大小 64
键入数字
默认 1024
范围 4 .. 18446744073709547520

编辑:我觉得返回给您的字符串长度为 1024 很有趣——这恰好是 mysql 中的默认最大长度。巧合?

于 2012-08-12T22:22:29.583 回答
1

当您GROUP_CONCAT在 mysql 中使用默认长度限制为 1024 时,结果中超过该长度的任何内容都将被截断。这也发生在我身上。

要确定这是否是问题所在,请尝试以下操作:

// echo string length to determine what your variable value length is
echo strlen($variable_here);

然后通过执行以下查询检查在 mysql 中设置的 concat 限制:

SHOW VARIABLES LIKE 'group_concat_max_len'

我在 phpMyAdmin 中运行它。如果从查询中获得相同的值strlen,则SHOW VARIABLES需要更新 my.conf 文件或要求主机执行此操作。在 WHM/cPanel 中,它位于/etc/my.conf中,在该文件中,您需要具有以下内容:

[mysqld]  #<-- Under that
group_concat_max_len=5120  #<-- add this

我选择 5x1024 将其设为 5120 只是为了不必再次处理它。将 conf 文件保存回服务器后,您需要重新启动 mysql 服务。如果您使用 WHM,您可以在Home » Restart Services » SQL Server (MySQL)下执行此操作

完成上述操作后,strlen实际上确实回显了 3519 并且该值不再被切断。

于 2015-03-05T04:20:09.533 回答
0

您的问题有点难以回答,因为:1.您提供的关于字符串实际大小的信息很少。2. 你问了几个问题(数组大小和字符串大小)。

您应该查看这个问题,然后向我们提供额外的信息,例如您正在使用哪个版本的 php,并且正如 @FLuffeh 在他的评论中所说,请向我们展示一些代码。

于 2012-08-12T22:25:15.627 回答