SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 06.11.2010 09:31:31

kilden
Участник
Зарегистрирован: 06.11.2010
Сообщений: 8

Load data infile

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

И еще вопрос , когда приписываем LOCAL , где должен располагаться загружаемый файл?

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

Неактивен

 

#2 06.11.2010 09:55:45

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

Re: Load data infile

kilden написал:

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

Сервер неправильно определяет кодировку вашего клиента. Нужно явно указать серверу в какой кодировке работает клиент
SET NAMES имя кодировки;
Подозреваю, что пользуетесь командной строкой в винде - там кодировка cp866.




kilden написал:

И еще вопрос , когда приписываем LOCAL , где должен располагаться загружаемый файл?

http://dev.mysql.com/doc/refman/5.1/en/load-data.html
If LOCAL is specified, the file is read by the client program on the client host and sent to the server. The file can be given as a full path name to specify its exact location. If given as a relative path name, the name is interpreted relative to the directory in which the client program was started.

Неактивен

 

#3 06.11.2010 10:33:55

kilden
Участник
Зарегистрирован: 06.11.2010
Сообщений: 8

Re: Load data infile

vasya написал:

kilden написал:

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

Сервер неправильно определяет кодировку вашего клиента. Нужно явно указать серверу в какой кодировке работает клиент
SET NAMES имя кодировки;
Подозреваю, что пользуетесь командной строкой в винде - там кодировка cp866.




kilden написал:

И еще вопрос , когда приписываем LOCAL , где должен располагаться загружаемый файл?

http://dev.mysql.com/doc/refman/5.1/en/load-data.html
If LOCAL is specified, the file is read by the client program on the client host and sent to the server. The file can be given as a full path name to specify its exact location. If given as a relative path name, the name is interpreted relative to the directory in which the client program was started.

Захожу через MySQL Command Line Client , попробывал прописать этот Set names и создал заново текстовик  ,всеравно не помогло(

Неактивен

 

#4 07.11.2010 01:04:47

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

Re: Load data infile

Поиск по форуму позволяет узнать много интересного, например:
http://sqlinfo.ru/forum/viewtopic.php?id=2675

paulus написал:

LOAD DATA INFILE берет значение кодировки почему-то из character_set_database
(логичнее было бы брать из кодировки таблицы, но так уж сделали).

Соответственно,

Код:

[celestia] root test > set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

[celestia] root test > load data infile '/tmp/blah' into table lditest;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 1

[celestia] root test > select * from lditest;
+---------------------------------------+
| a                                     |
+---------------------------------------+
| Привет, я — русская строка            |
+---------------------------------------+
1 row in set (0.00 sec)

В случае винды:

C:\Program Files\MySQL\MySQL Server 5.1\bin>chcp 1251
Текущая кодовая страница: 1251

C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.1.21-beta-community-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

(none) >use test
Database changed
test >create table testload (q varchar(255) character set cp1251);
Query OK, 0 rows affected (0.19 sec)

test >select @@character_set_database;
+--------------------------+
| @@character_set_database |
+--------------------------+
| utf8                     |
+--------------------------+
1 row in set (0.00 sec)

test >set character_set_database=cp1251;
Query OK, 0 rows affected (0.00 sec)

test >load data infile 'c:\\load.txt' into table testload;
Query OK, 2 rows affected (0.42 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

test >select * from testload;
+--------------+
| q            |
+--------------+
      |
| строка       |
+--------------+
2 rows in set (0.00 sec)

test >set names cp1251;
Query OK, 0 rows affected (0.00 sec)


test >select * from testload;
+---------+
| q       |
+---------+
 | tring
| строка        |
+---------+
2 rows in set (0.00 sec)

 

Неактивен

 

#5 18.11.2010 15:08:20

kilden
Участник
Зарегистрирован: 06.11.2010
Сообщений: 8

Re: Load data infile

При помощи set names cp866 все стало видно , видно дело было не в базе а в консоле

Неактивен

 

Board footer

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