ОШИБКА 2020 (HY000): получен пакет больше, чем байты 'max_allowed_packet', при попытке извлечь данные из таблицы

Я работаю над локальной настройкой веб-приложения, и мне нужно извлечь все элементы из таблицы, но когда я это делаю select * from my_table, это дает мне эту ошибкуERROR 2020 (HY000): Got packet bigger than 'max_allowed_packet' bytes,

Я пробовал много вариантов, некоторые из которых включают в себя:

-Установка max_allowed_packet в моем \etc\mysql\mysql.conf.d\mysqld.cnf а также \etc\mysql\mysql.conf.d\mysqldump.cnf(Я не использую дамп, но чтобы быть в безопасности), до 1G, затем 2G и т. Д.

-Также пытался использовать set global net_buffer_length=1000000; а также set global max_allowed_packet=1000000000; в MySQL в терминале

Я получил немного успеха, когда я использовал mysql --max_allowed_packet=100M -u root - он дает все данные, но проблема в том, что он работает только в терминале, но мне нужно получить данные в моем веб-приложении, где оно не будет работать.

Интересно то, что я пытался использовать лимит, поэтому, когда я использую select * from my_table limit 200, это дает ожидаемый результат (но только 200 строк). Общее количество строк составляет около 350. Таким образом, ошибка в данных более высоких строк, чем 200. Чтобы проверить размер результата строки, я использовал следующий запрос:select sum(row_size) from ( select char_length(id)+ char_length(code)+ char_length(name)+ char_length(url) +char_length(group)+ char_length(template)+ char_length(html) + char_length(association) + char_length(status) + char_length(created_at)+ char_length(updated_at) + char_length(html_generation_date) as row_size from myTable limit 311,1) as tbl1; Что дает мне: 43095 в то время как для limit 150,1 Приведенный выше запрос дает: 94428. Таким образом, размер строки не является проблемой.

Я пробовал решения, приведенные на MySQL Error 1153 - Получил пакет больше чем 'max_allowed_packet' байты и https://serverfault.com/questions/102564/error-2020-got-packet-bigger-than-max-allowed-packet-bytes-when-dumping-table.

В принципе, я хочу сделать что-то вроде этого: myTable::model()->findAll(); в моем приложении PHP Yii, которое эквивалентно select * from my_table и после этого я могу использовать данные, чтобы заполнить свой список.

Схема таблицы:+----------------------+--------------+------+-----+-------------------+-----------------------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | code | varchar(150) | NO | | NULL | | | name | varchar(150) | NO | | NULL | | | url | varchar(255) | NO | | NULL | | | group | int(11) | NO | MUL | NULL | | | template | int(11) | NO | | NULL | | | html | longtext | YES | | NULL | | | association | varchar(100) | NO | | NULL | | | status | tinyint(1) | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | | updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | html_generation_date | timestamp | YES | | NULL | |

И версия mysql: 14.14 Распространение: 5.7.26. Двигатель БД - InnoDB.

Любая помощь будет высоко оценена.

0 ответов

Другие вопросы по тегам