SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.03.2008 14:02:43

Alexk
Участник
Зарегистрирован: 24.03.2008
Сообщений: 1

Не могу вставить 16к текста

Здравствуйте.

Есть таблица с полями 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--рыться в инете...

Неактивен

 

#2 24.03.2008 15:42:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вставить 16к текста

Подозреваю, что это Ваш драйвер ODBC обрезает - у него тоже есть ограничения на длину пакета.

Возможно, Вы вставляете, например, данные в таблицу utf8 с подключением в другой кодировке.
В этом случае MySQL не правильно считает длину сообщений при добавлении строк (известная
ошибка), и может говорить "не вставлено". Т.е. если у Вас есть столбец шириной 300 символов, Вы
можете получить ошибку переполнения при вставке 100 символов в неправильной кодировке.

Но, я так понимаю, Ваша проблема, все-таки, с ODBC.

Неактивен

 

#3 02.12.2009 10:13:05

CaXaP
Участник
Зарегистрирован: 02.12.2009
Сообщений: 3

Re: Не могу вставить 16к текста

Добрый день!

Извините за археологию, но у меня возникла схожая проблема...

Точно также - через пхп не вставить большой текст в БД (пишет data too long).
Если текст сократить в 2 раза, то запись вставится, т.е. проблема наверняка в длине строки.
Если поменять кодировку с utf8 на cp1251, то запись также вставится.

Если после такой вставки попробовать в бд изменить тип поля опять на utf8 (через mysql administrator)
то снова напишут ошибку data too long.

Если же полученную таблицу экспортировать, поменять в дампе кодировку и снова импортировать
через mysql query browser, то кодировка поменяется корректно и русский текст не исказится.

Полагаю, что где то есть настройка, устанавливающая максимальный размер отправляемого из php
текста, но я не могу её нигде найти - где она может быть?

Заранее спасибо за ответ.

Неактивен

 

#4 02.12.2009 15:13:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вставить 16к текста

Со стороны сервера и клиента есть ограничения max-allowed-packet, посмотрите
на них сначала (в my.cnf). Есть ли какое-то дополнительное ограничение в PHP —
сложно сказать. Там точно есть ограничение на прием данных POST, возможно
(и скорее всего) Вы упираетесь в него.

Неактивен

 

#5 03.12.2009 02:16:09

CaXaP
Участник
Зарегистрирован: 02.12.2009
Сообщений: 3

Re: Не могу вставить 16к текста

max-allowed-packet не помог sad

Ограничение со стороны пхп... возможно, но этому противоречит 2 факта:

1. Если ошибка в пхп, то почему же тогда выдаётся MySql ошибка data too long?
Кстати, я опытным путём установил, что действительно - ошибка начинает вылетать после преодоления некого "барьера" допустимого колва символов. До барьера ошибки нет, после - есть.

2. Я проводил такой опыт - менял в таблице кодировку на cp1251, сохранял статью (сохранялась корректно) и затем через "mysql администратор" пытался поменять кодировку назад - вылетала ошибка data too long.

Имхо, глючит MySql - может на поле типа text есть также какое-нибудь ограничение и мне стоит поменять тип поля на какой-нибудь другой? Или мб в настройках есть параметр максимально допустимого числа символов в одном поле (или в поле типа text) ?

Неактивен

 

#6 03.12.2009 02:18:20

CaXaP
Участник
Зарегистрирован: 02.12.2009
Сообщений: 3

Re: Не могу вставить 16к текста

ааааа!!! я дурак sad

Есть поле LongText - в него статья сохранилась!
Теперь буду знать, что text тоже ограничен...

paulus, спасибо за помощь.

Неактивен

 

#7 03.12.2009 22:47:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Не могу вставить 16к текста

Колонка типа TEXT имеет ограничение на длинну данных в байтах - 65535.
Если изначально данные хранились в однрбайтовой кодировке (cp1251), а потом переводятся в требайтовую (utf8), то размер данных может вылезти за допустимый предел.

Кроме LongText есть ещё MEDIUMTEXT (возможно вам его хватит).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson