Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ошибка при вводе данных в TEXT и BLOB
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » ошибка при вводе данных в TEXT и BLOB

Страниц (1): [1]
 

1. bavv - 28 Апреля, 2007 - 10:57:24 - перейти к сообщению
Как я понимаю проблема тоже в конфгурации MySQL.
При вводе данных в столбец с типом TEXT, LONGTEXT или BLOB, LONGBLOB.
выдает ошибку "data too long 1406".

На самом деле вес информации которую я вношу не превышает 30К.
При чем раньше в эту же таблицу, я восил данные и большего объема.
Просто вдруг с определенной записи начинает выдавать таукю ошибку.

То же самое возникает с абсолютно разными таблицами и базами.

MySQL установлен локально. Я использую InnoDB.

В мануале есть рекомендация увеличить параметр max_allowed_packed на стророне клиента и сервера.
Я пробывал - ничего не дало.

Посоветуйте, что-нибудь по теме, пожалуйста.

2. valenok - 28 Апреля, 2007 - 11:18:51 - перейти к сообщению
эта проблема возникает когда вставляешь utf8 данные
Укажите после подключения
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP
  3.    mysql_query ("set character_set_client='cp1251'");  
  4.    mysql_query ("set character_set_results='cp1251'");  
  5.    mysql_query ("set collation_connection='cp1251_general_ci'");  
  6.  ?>  



Из-за неверно выставленной кодировки в базу записываются данные в виде html сущностей (по моему). Соответственно каждый символ съедает не один байт, а шесть (кажется). Что-то вроде ( &#039; ).

Правильное решение только одно - настроить кодировку БД.
Из него вытекает:
1) При соединении с БД устанавливать корректный SET NAMES.
2) Использовать Юникод
3) Настроить на кирилицу конфигурационный файл MySQL - my.ini.
3. bavv - 28 Апреля, 2007 - 11:34:29 - перейти к сообщению
valenok пишет:
эта проблема возникает когда вставляешь utf8 данные
Укажите после подключения
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP
  3.    mysql_query ("set character_set_client='cp1251'");  
  4.    mysql_query ("set character_set_results='cp1251'");  
  5.    mysql_query ("set collation_connection='cp1251_general_ci'");  
  6.  ?>  



Из-за неверно выставленной кодировки в базу записываются данные в виде html сущностей (по моему). Соответственно каждый символ съедает не один байт, а шесть (кажется). Что-то вроде ( &#039; ).

Правильное решение только одно - настроить кодировку БД.
Из него вытекает:
1) При соединении с БД устанавливать корректный SET NAMES.
2) Использовать Юникод
3) Настроить на кирилицу конфигурационный файл MySQL - my.ini.


У меня по умолчанию стоит кодировка cp1251.
К тому же я вношу в базу чистый тект вырезанный из блокнота посредством командной строки.
4. valenok - 28 Апреля, 2007 - 11:48:44 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  <?PHP  
  2.     mysql_query ("SET NAMES `cp1251`");  
  3.     mysql_query ("set character_set_client='cp1251'");  
  4.     mysql_query ("set character_set_results='cp1251'");  
  5.     mysql_query ("set collation_connection='cp1251_general_ci'");  
  6.   ?>


Эта проблема существует только в mysql 5
Смена кодировки БД, таблицы и т.д. не помогает.
Англ. яз прекрасно вставляется.

http://ru.php.net/mysql/
"Замечание: Если вам требуется поддержка кодировок (отличных от latin, установленной по умолчанию), вам придётся установить внешнюю библиотеку, скомпилированную с их поддержкой."

Не смотря на то, все советуют ставить
mysql_query ("SET NAMES `cp1251`");
и я в том числе.
5. bavv - 28 Апреля, 2007 - 11:54:06 - перейти к сообщению
valenok пишет:
PHP:
скопировать код в буфер обмена
  1.  <?PHP  
  2.     mysql_query ("SET NAMES `cp1251`");  
  3.     mysql_query ("set character_set_client='cp1251'");  
  4.     mysql_query ("set character_set_results='cp1251'");  
  5.     mysql_query ("set collation_connection='cp1251_general_ci'");  
  6.   ?>


Эта проблема существует только в mysql 5
Смена кодировки БД, таблицы и т.д. не помогает.
Англ. яз прекрасно вставляется.



http://ru.php.net/mysql/
"Замечание: Если вам требуется поддержка кодировок (отличных от latin, установленной по умолчанию), вам придётся установить внешнюю библиотеку, скомпилированную с их поддержкой."

Не смотря на то, все советуют ставить
mysql_query ("SET NAMES `cp1251`");
и я в том числе.


ок. хорошо.
Но если мне нужно внести данные с командной строки?

к тому же у меня MySQL 4.0
И почему раньше данные свободно вносились?
6. valenok - 28 Апреля, 2007 - 11:55:39 - перейти к сообщению
Наверное раньше никто не трогал my.ini =]
С командной строки просто добавьте до самого ввода следующее:
SET NAMES `cp1251`;
7. bavv - 28 Апреля, 2007 - 11:57:55 - перейти к сообщению
valenok пишет:
Наверное раньше никто не трогал my.ini =]
С командной строки просто добавьте до самого ввода следующее:
SET NAMES `cp1251`;


только что попробывал.
не помогает
все равно ош. 1406 'data too long';
вставил тескт на 10 предложений.
8. valenok - 28 Апреля, 2007 - 11:59:38 - перейти к сообщению
попробуйте всё таки убрать игнорирование пользовательской кодировки в my.ini
9. bavv - 28 Апреля, 2007 - 12:00:20 - перейти к сообщению
valenok пишет:
попробуйте всё таки убрать игнорирование пользовательской кодировки в my.ini


уже убрал.
10. evgenijj - 28 Апреля, 2007 - 12:00:25 - перейти к сообщению
valenok пишет:
Наверное раньше никто не трогал my.ini

Трогал я my.ini. Убил на это целый день. Перерыл кучу информации в Интернете. Под Windows XP так и не смог избавиться от '?????' без использования запроса SET NAMES `cp1251`. По поводу FreeBSD/Linux - не знаю. Говорят, там эта проблема легко решается именно редактированием my.ini.
11. valenok - 28 Апреля, 2007 - 12:04:23 - перейти к сообщению
bavv
Какая у вас операционная система ?
Можно ваш код ? Точнее то что вы запускаете в командной строке.

--

Я посмотрел, через скрипты подход смены кодировки работает.

А из командной строки идёт
MYSQL Character set cp1251 is not a compiled Character set and is not specified in the "C:\mysql\\share\charsets\index.xml" file

MYSQL Набор символов cp1251 не является скомпилированным Набором символов и не определен в файле "C:\mysql\\share\charsets\index.xml"

--

Проблема заключается в том, что MySQL ищет файл набора символов по вшитому в исполняемый файл пути C:\mysql. Необходимо настроить my.ini на точный путь до файла с набором символов. Задаётся он директивой - character-sets-dir. Вписывается данная директива в разделы [client] и [mysqld] конфигурационного файла.

В моём случае директива выглядит следующим образом:
character-sets-dir="С:/Program Files/Programming/MySQL Server 5.0/share/charsets"

Делай по аналогии.
После изменений не забудь перезапустить MySQL сервис.
12. bavv - 28 Апреля, 2007 - 12:49:04 - перейти к сообщению
valenok пишет:
bavv
Какая у вас операционная система ?
Можно ваш код ? Точнее то что вы запускаете в командной строке.

--

Я посмотрел, через скрипты подход смены кодировки работает.

А из командной строки идёт
MYSQL Character set cp1251 is not a compiled Character set and is not specified in the "C:mysql\sharecharsetsindex.xml" file

MYSQL Набор символов cp1251 не является скомпилированным Набором символов и не определен в файле "C:mysql\sharecharsetsindex.xml"

--

Проблема заключается в том, что MySQL ищет файл набора символов по вшитому в исполняемый файл пути C:mysql. Необходимо настроить my.ini на точный путь до файла с набором символов. Задаётся он директивой - character-sets-dir. Вписывается данная директива в разделы [client] и [mysqld] конфигурационного файла.

В моём случае директива выглядит следующим образом:
character-sets-dir="С:/Program Files/Programming/MySQL Server 5.0/share/charsets"

Делай по аналогии.
После изменений не забудь перезапустить MySQL сервис.


ОС: XP Pro
Код:

MYSQL>SET NAMES `cp1251`;
MYSQL>SET character_set_client='cp1251';
MYSQL>SET character_set_results='cp1251';
MYSQL>SET collation_connection='cp1251_general_ci';
MYSQL>INSERT INTO furniture (info1)
VALUES ('Winkhaus AutoPilot має свій неповторний ступінь надійності завдяки продуманій конструкції, яка робить можливим системне з'єднання частин фурнітури з силовим і геометричним замиканням. Підвержені особливим навантаженням частини, такі як грибкові болти і защіпки, виконані із міцної сталі.Нова геометрична силовая форма блокування штифту петлі оптимально перешкоджає випаданню штифту. Нове покоління кронштейнів і петель допускає вагу стулки до 130 кг. Конструкція периметрального з'єднання оптимально розподіляє навантаження на частини фурнітури, схильні найбільшому навантаженню. Таким чином виникає оптимальний розподіл навантаження на елементи кріплення, яке гарантує довгострокову надійну роботу.
Winkhaus AutoPilot - система елементів, що дозволяє задовольнити індивідуальні вимоги безпеки різного степеня складності');

В итоге выдоет ошибку о которой я говорил.
13. valenok - 28 Апреля, 2007 - 13:46:05 - перейти к сообщению
У тебя не русский, поэтому кодировка cp1251 тебе н подойдёт.
Я не помню какая для украинского, хотя можно пробовать работать с utf8\n\n(Добавление)
MYSQL>SET NAMES `utf8`;
MYSQL>SET character_set_client='utf8';
MYSQL>SET character_set_results='utf8';
MYSQL>SET collation_connection='latin1_swedish_ci';
14. bavv - 28 Апреля, 2007 - 13:59:04 - перейти к сообщению
кроме того если я вставляю половину с этого текста - все нормально
15. -SCHATTEN- - 29 Апреля, 2007 - 11:46:22 - перейти к сообщению
Поэтому и работает нормально с половиной текста, что в неверной одировке текст искажается...

 

Powered by ExBB FM 1.0 RC1