Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Data too long for column 'name' at row 1
 
 автор: snakeRU54   (16.08.2009 в 19:38)   письмо автору
 
 

В общем, имеется некая таблица:
Field type
name varchar(255)
opjsanie mediumblob

Пытаюсь, ради пробы, вставить в неё русский текст из текстового файла следующего (именно такого!) вида:
шоишщгишщги зщшрзщгижзгшщпизшгщи
ждолтижщолрижщ лорипмжоижшгои
жол дгрмлдгнмлдг
лоижшоишоги дшрмидшгнмидшгнмидш

И получаю сообщение об ошибке, приведённое в названии темы.

Помогите.

  Ответить  
 
 автор: cheops   (16.08.2009 в 19:44)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 19:38)
 

Настройку кодировки соединения при помощи запроса
SET NAMES cp1251;

производите? И какую кодировку имеет таблица по умолчанию?

  Ответить  
 
 автор: snakeRU54   (16.08.2009 в 19:54)   письмо автору
 
   для: cheops   (16.08.2009 в 19:44)
 

Благодарствую. Сделал
set database 'имярек' character set cp1251;

Всё вошло, но в таблице появились косяки.
В столбце 'Name' - вопросы.
В столбце 'opisanie' - сплошная тарабарщина.

000.txt (из которого и подгружаю в таблицу) делал в windows, "Блокнотом". Кодировки cp1251 в "Блокноте", в меня "Сохранить как..." - нет)))) Где её искать?

  Ответить  
 
 автор: cheops   (16.08.2009 в 20:04)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 19:54)
 

Имеется в виду кодировка таблицы по умолчанию (дело в том, что нужно указать, что она также хранит данные в кодировке cp1251). Выполните запрос
SHOW CREATE TABLE tbl

где tbl - имя вашей таблицы. Как выглядит ответ?

  Ответить  
 
 автор: snakeRU54   (16.08.2009 в 20:25)   письмо автору
 
   для: cheops   (16.08.2009 в 20:04)
 

Таблицу я пересоздал, но с теми же параметрами, что и были.

Ответ таков:
|a |create table 'a' (
'name' varchar(255) not null,
'opisanie' mediumblob
) engine=innodb default charset=cp1251 |

  Ответить  
 
 автор: cheops   (16.08.2009 в 20:33)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 20:25)
 

Все правильно. А заполняете вы её при помощи какого оператора/команды и при помощи какого клиента (консольный mysql, PHP-скрипт)?

  Ответить  
 
 автор: snakeRU54   (16.08.2009 в 20:37)   письмо автору
 
   для: cheops   (16.08.2009 в 20:33)
 

консольный mysql 5, установил с диска к книге Кузнецова и Симдянова)))
командой
load data infile 'f:\\000.txt'
replace into table a
lines starting by '' terminated by '\n';

П. С. В "Блокноте" кодировка при сохранении указана ANSI. В этом дело?

  Ответить  
 
 автор: cheops   (16.08.2009 в 21:32)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 20:37)
 

Дело ещё может быть в том, что кодировка консоли в Windows по умолчанию не cp1251, а cp866 (DOS), поэтому перед запуском mysql в консоли необходимо сменить кодировку при помощи команды
chcp 1251

Вообще были сигналы о проблемах заполнения данных с русскими символами при помощи LOAD DATA INFILE, лучше, конечно, сформировать дамп и развертывать его при помощи mysql, не входя в диалоговый режим.

PS Проблему с кодировкой можно однозначно решить при помощи нового ключевого слова CHARACTER SET, однако, для этого нужна версия MySQL-сервера выше 5.0.38 или 5.1.17. У вас какая версия (SELECT VERSION())?

  Ответить  
 
 автор: snakeRU54   (16.08.2009 в 22:25)   письмо автору
 
   для: cheops   (16.08.2009 в 21:32)
 

5.0.21-community-nt

Хотелось бы, в общих чертах, сцылочку или указание, где почитать о следующих вещах:
1. "...перед запуском mysql в консоли необходимо сменить кодировку при помощи команды... chch 1251"

2. "сформировать дамп и развертывать его при помощи mysql, не входя в диалоговый режим"

  Ответить  
 
 автор: Trianon   (16.08.2009 в 23:10)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 22:25)
 

2. Вот такой примерно файл называется дампом:

SET NAMES 'cp1251';

CREATE TABLE IF NOT EXIST 'a' (
  'name' VARCHAR(255) NOT NULL,
  'opisanie' MEDIUMBLOB
);


INSERT INTO `a` (`name`, `opisanie`) VALUES
  ('Имя 1', 'Описание 1'), 
  ('Имя 2', 'Описание 2'), 
  ('Name 3', 'Description 3');

Вот так он примерно загружается в БД
mysql -h localhost -u root -Pпароль имяБД <dump.sql

  Ответить  
 
 автор: Trianon   (16.08.2009 в 23:00)   письмо автору
 
   для: snakeRU54   (16.08.2009 в 19:54)
 

Столбец opisanie, судя по примененному типу BLOB, вообще не предназначен для хранения текста.

  Ответить  
 
 автор: snakeRU54   (17.08.2009 в 12:02)   письмо автору
 
   для: Trianon   (16.08.2009 в 23:00)
 

Так, таблицу, как было указано, создал.
Ячейки в ней заполнились.
Но сработало в несколько отличном виде команды:
insert into a(name, opisanie) values ('имя 1', 'опис 2'), и так далле... Я имею ввиду, что кавычки в некоторым местах были не нужны - мне ошибку выдавалО.
В итоге получился адекватный текст.
Объявляю большую спасибу-благодарность.

Но тогда появляется проблема величиной в 30 000 терминов толкового словаря. Проблематично будет заполнять вручную)))

Со строкой
mysql -h localhost -u root -Pпароль имяБД <dump.sql
я что-то не разбираюсь.

"localhost" - путь к файл.тхт?

Пароля у меня тут нет.

  Ответить  
 
 автор: Trianon   (17.08.2009 в 12:11)   письмо автору
 
   для: snakeRU54   (17.08.2009 в 12:02)
 

>Но сработало в несколько отличном виде команды:
>insert into a(name, opisanie) values ('имя 1', 'опис 2'), и так далле... Я имею ввиду, что кавычки в некоторым местах были не нужны - мне ошибку выдавалО.

Вы посмотрите внимательно на кавычки. Они другие.

>Но тогда появляется проблема величиной в 30 000 терминов толкового словаря. Проблематично будет заполнять вручную)))

составьте php-скрипт. Или примените phpMyAdmin

>"localhost" - путь к файл.тхт?

localhost - адрес sql-сервера.
путь к файлу - dump.sql


>Пароля у меня тут нет.

Если пароля нет - можете вызвать клиент так:
mysql имяБД <файл.тхт

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования