Максимальный размер значения в массиве PHP

Есть ли ограничение на строку значения в ассоциативном массиве 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 все работает. Спасибо!


person Kevin Rave    schedule 12.08.2012    source источник
comment
GROUP_CONCAT имеет ограничение в mysql, ограничение php теоретически является максимальным ограничением памяти. Покажите нам код   -  person mrok    schedule 13.08.2012
comment
Когда я запускаю запрос, он показывает полный CSV.   -  person Kevin Rave    schedule 13.08.2012
comment
как вы печатаете массив в PHP - ex var_dump вырезает данные для удобства чтения. Любой пример кода по-прежнему приветствуется.   -  person mrok    schedule 13.08.2012
comment
Я пробовал и var_dump, и print_r. Оба печатают одинаково. Моя проверка не проходит из-за этого.   -  person Kevin Rave    schedule 13.08.2012
comment
попробуйте echo strlen($your_array['answers']) - 1024 - это просто длина этой строки. Это то же самое, что и string(3) 232 - 3 символа в строке   -  person mrok    schedule 13.08.2012


Ответы (3)


Возможно, вам придется прочитать о длине max concat здесь.

Command-Line Format        --group_concat_max_len=#
Option-File Format         group_concat_max_len
Option Sets Variable       Yes, group_concat_max_len
Variable Name              group_concat_max_len
Variable Scope  Global, Session

Dynamic Variable           Yes
  -- Permitted Values
Platform Bit Size          32
Type                       numeric
Default                    1024
Range                      4 .. 4294967295

  -- Permitted Values
Platform Bit Size          64
Type                       numeric
Default                    1024
Range                      4 .. 18446744073709547520

Изменить: я нахожу довольно забавным, что возвращаемая вам строка имеет длину 1024, что является максимальной длиной по умолчанию в mysql. Совпадение?

person Fluffeh    schedule 12.08.2012
comment
Я думаю, это может быть проблемой. Мне нужно обновить этот параметр и проверить, работает ли он. Однако, когда я запускаю запрос в phpMyAdmin, он показывает полную строку. - person Kevin Rave; 13.08.2012
comment
Проблема все еще существует даже после установки указанной выше переменной на 5000. Есть другие идеи? - person Kevin Rave; 14.08.2012

Когда вы используете GROUP_CONCAT в mysql с ограничением длины по умолчанию 1024, все, что выше этого в ваших результатах, будет обрезано. Это случилось и со мной.

Чтобы определить, в этом ли проблема, попробуйте следующее:

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

Затем проверьте, какое ограничение concat установлено в mysql, выполнив этот запрос:

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, просто чтобы не иметь с ним дело снова. После того, как вы сохранили файл конфигурации обратно на сервер, вам необходимо перезапустить службу mysql. Если вы используете WHM, это можно сделать в разделе Главная » Перезапустить службы » SQL Server (MySQL).

После того, как я сделал вышеописанное, strlen на самом деле выдал эхо 3519, и значение больше не обрезалось.

person Chris    schedule 05.03.2015

На ваш вопрос несколько сложно ответить, потому что: 1. вы даете очень мало информации о фактическом размере вашей строки. 2. Вы задаете несколько вопросов (размер массива и размер строки).

Вы должны проверить этот вопрос, а затем предоставьте нам дополнительную информацию, например, какую версию php вы используете, а также, как говорит @FLuffeh в своем комментарии, покажите нам код.

person Daniel Figueroa    schedule 12.08.2012
comment
Я думаю, важно знать, что, конечно же, есть предел, вопрос в том, близки ли вы к этому пределу? - person Daniel Figueroa; 13.08.2012
comment
Я обновил свой пост с более подробной информацией. Это должно объяснить вам, что вам нужно. - person Kevin Rave; 13.08.2012