Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Есть таблица с полями LONGTEXT. Через ODBC выполняется запрос INSERT, где длина вставляемого текста 10-30к, в среднем 16кб.
Получаю ошибку data too long for column... - чушь, должно влезать 4Гб, уж мегабайт точно.
Попробовал такие настройки в my.ini:
max_allowed_packet=10M
net_buffer_length=10M
Вроде через query browser теперь вставляется, а через ODBC по-прежнему ошибка.
Помогло только отключение srtict mode, поставил sql-mode="MYSQL40".
Но вроде при этом строки могут обрезаться без сообщения об ошибке (или не могут?). Хотя несколько записей вставилось нормально, - но это в тестовом режиме, а во время работы не уследишь...
Использую Win XP, MySQL 5.0.18 (сейчас поставил 5.0.51a - то же самое), база MYISAM utf8, ODBC коннектор 3.51.23.
Возможность отката транзакции мне не нужна, требуется только одно: либо вставка без обрезания текста (в чем не уверен), либо сообщение об ошибке.
Помогите, а то заколебался перебирать настройки my.ini--версию MySQL--рыться в инете...
Неактивен
Подозреваю, что это Ваш драйвер ODBC обрезает - у него тоже есть ограничения на длину пакета.
Возможно, Вы вставляете, например, данные в таблицу utf8 с подключением в другой кодировке.
В этом случае MySQL не правильно считает длину сообщений при добавлении строк (известная
ошибка), и может говорить "не вставлено". Т.е. если у Вас есть столбец шириной 300 символов, Вы
можете получить ошибку переполнения при вставке 100 символов в неправильной кодировке.
Но, я так понимаю, Ваша проблема, все-таки, с ODBC.
Неактивен
Добрый день!
Извините за археологию, но у меня возникла схожая проблема...
Точно также - через пхп не вставить большой текст в БД (пишет data too long).
Если текст сократить в 2 раза, то запись вставится, т.е. проблема наверняка в длине строки.
Если поменять кодировку с utf8 на cp1251, то запись также вставится.
Если после такой вставки попробовать в бд изменить тип поля опять на utf8 (через mysql administrator)
то снова напишут ошибку data too long.
Если же полученную таблицу экспортировать, поменять в дампе кодировку и снова импортировать
через mysql query browser, то кодировка поменяется корректно и русский текст не исказится.
Полагаю, что где то есть настройка, устанавливающая максимальный размер отправляемого из php
текста, но я не могу её нигде найти - где она может быть?
Заранее спасибо за ответ.
Неактивен
Со стороны сервера и клиента есть ограничения max-allowed-packet, посмотрите
на них сначала (в my.cnf). Есть ли какое-то дополнительное ограничение в PHP —
сложно сказать. Там точно есть ограничение на прием данных POST, возможно
(и скорее всего) Вы упираетесь в него.
Неактивен
max-allowed-packet не помог
Ограничение со стороны пхп... возможно, но этому противоречит 2 факта:
1. Если ошибка в пхп, то почему же тогда выдаётся MySql ошибка data too long?
Кстати, я опытным путём установил, что действительно - ошибка начинает вылетать после преодоления некого "барьера" допустимого колва символов. До барьера ошибки нет, после - есть.
2. Я проводил такой опыт - менял в таблице кодировку на cp1251, сохранял статью (сохранялась корректно) и затем через "mysql администратор" пытался поменять кодировку назад - вылетала ошибка data too long.
Имхо, глючит MySql - может на поле типа text есть также какое-нибудь ограничение и мне стоит поменять тип поля на какой-нибудь другой? Или мб в настройках есть параметр максимально допустимого числа символов в одном поле (или в поле типа text) ?
Неактивен
ааааа!!! я дурак
Есть поле LongText - в него статья сохранилась!
Теперь буду знать, что text тоже ограничен...
paulus, спасибо за помощь.
Неактивен
Колонка типа TEXT имеет ограничение на длинну данных в байтах - 65535.
Если изначально данные хранились в однрбайтовой кодировке (cp1251), а потом переводятся в требайтовую (utf8), то размер данных может вылезти за допустимый предел.
Кроме LongText есть ещё MEDIUMTEXT (возможно вам его хватит).
Неактивен