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