Фреймворки →  Zend DB съедает память

Бывает, так, что валится ошибка и нужно быть телепатом, что бы продетектить эту ошибку. Так было и в этот раз.

При попытке забрать данные при помощи fetch, fetchAll, fetch*, find, findParentRow и т.д… выдает ошибку.

Fatal error: Out of memory (allocated 12058624) (tried to allocate 4294967294 bytes)


То, что это Zend_DB стало понятно немного позже. Zend_DB некорректно работает с типами LONGTEXT И LONGBLOB и эту проблему разработчики zend framework еще не решили. При формировании sql запроса Zend_DB смотрит на типы полей таблицы и пытается выделить память под будущей массив записей для каждой ячейки таблицы в соответствии с ее максимальным размером.

Для справки, размер LONGTEXT 4GB (2 в степени 32 – 1) символов т.е. даже, если размеры ваше таблицы не превышают 10kb, но в ней есть злостное поле LONGTEXT или LONGBLOB, то скорее будет хана.

Рецепт лечения простой — LONGTEXT меняем на MEDIUMTEXT (его размер 16Mb), а еще лучше на varchar(64000), но это совсем другая история:)

Для неверующих и читающих на английском http://framework.zend.com/issues/browse/ZF-1498
2


Вставка изображения
Файл:
Ссылка:
Выравнивание:
Описание:
комментарии(4): 
altesack 16 июня 2009, 20:51 #
0 
Забавно, а я пока всё на CodeIgniter + Eclipse PDT сижу/
А на Zend только с опаской поглядываю.
igorok 16 июня 2009, 21:09 #
0 
eclipse топорный или я не умею его готовить:)
мне больше netbeans нравится
altesack 17 июня 2009, 06:50 #
0 
Опа… Я думал NetBeans только яву рулит.
Нужно попробовать
igorok 17 июня 2009, 10:47 #
0 
netbeans — это среда разработки, также, как и Eclipse и по большому счету пох на чем там писать

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.