SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 08.11.2007 12:13:07

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Импорт текстовых файлов с русскими символами в MySQL

Таблица MS Access с русскими полями экспортирована в текстовый файл. Кодировка видимо 1251
После импорта в MySQL с помощью Local Data Infile из текстовых полей с русскими полями выводится абракадабра.
Как можно настроить кодировку MySQL 5.0 ? Или как правильно сделать экспорт из MS Access в другую кодировку?

Неактивен

 

#2 08.11.2007 12:31:25

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

кодировку явно указать пробовали?

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Код:

LOAD DATA INFILE 'file_name' INTO TABLE tbl_name CHARACTER SET cp1251 .......

Неактивен

 

#3 08.11.2007 13:51:33

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Re: Импорт текстовых файлов с русскими символами в MySQL

Извините, в MYSQL 5.0 в синтаксисе load data нет character set
кроме этого пробовал сменить кодировку:
set character_set_server=cp1251;
это не помогло

Неактивен

 

#4 08.11.2007 14:16:16

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Импорт текстовых файлов с русскими символами в MySQL

Попробуйте SET NAMES cp1251
и кроме того, убедитесь (SHOW CREATE TABLE имя_таблицы), что таблица создана в cp1251 (или в другой русской кодировке)

Неактивен

 

#5 08.11.2007 16:40:07

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Re: Импорт текстовых файлов с русскими символами в MySQL

к сожалению весь блок команд
SET character_set_client=cp1251;      /
Set character_set_server=cp1251;
SET NAMES CP1251
SET COLLATION_CONNECTION=CP1251_GENERAL_CI"
ни к чему не приводит - SHOW CREATE TABLE имя_таблицы - показывает Latin1
И соответственно при импорте с Load data нет русских символов , так же
не может вставить INSERT Into Test VALUES("Дима");

Отредактированно eugira (08.11.2007 16:41:03)

Неактивен

 

#6 08.11.2007 18:43:33

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

Re: Импорт текстовых файлов с русскими символами в MySQL

ALTER TABLE имя_таблицы CONVERT TO CHARSET cp1251;

Неактивен

 

#7 08.11.2007 20:49:12

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

eugira написал:

Извините, в MYSQL 5.0 в синтаксисе load data нет character set
кроме этого пробовал сменить кодировку:
set character_set_server=cp1251;
это не помогло

не понял как это нет???
а это тогда что?
http://dev.mysql.com/doc/refman/5.0/en/load-data.html

MySQL 5.0 Reference Manual:

12.2.5 LOAD DATA INFILE Syntax

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]


причем там же черным по белому написано:

The character set indicated by the character_set_database system variable is used to interpret the information in the file. SET NAMES and the setting of character_set_client do not affect interpretation of input. Beginning with MySQL 5.0.38, if the contents of the input file use a character set that differs from the default, it is possible (and usually preferable) to use the CHARACTER SET clause to specify the character set of the file.

или может у вас версия таки меньше 5.0.38? Тогда. имхо вам нужно файл перекодировать в нужную кодировку (если совет paulus-а не поможет)



eugira написал:

ни к чему не приводит - SHOW CREATE TABLE имя_таблицы - показывает Latin1

а зачем вы таблицу создаете в latin1 если данные у вас в cp1251?

Отредактированно Shopen (08.11.2007 20:52:15)

Неактивен

 

#8 09.11.2007 09:17:08

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Re: Импорт текстовых файлов с русскими символами в MySQL

1)Да у меня версия 5.0.34 и там нет в load data character set
2) я всё-таки допёр, что создавать табл надо в синтаксисе
CREATE TABLE tb(id int,fam varchar(20)) character set=cp1251;
при этом show table показывает именно cp1251, но новая проблема - при загрузке по load data
поля с русским текстом отображаются при SELECT * from tb; как ????

Неактивен

 

#9 09.11.2007 09:44:13

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Re: Импорт текстовых файлов с русскими символами в MySQL

Да, ещё я допёр до того, что точно не знаю и не умею определить кодировку текстового файла экспортированного из MS Access
Поэтому в следующей попытке создания табл tb я указал utf8
После этого у меня по SELECT * наконец стал виден русский текст но как-то странно например
Иванова отображается как И|в|а|н|о|в|а
1)Какие ещё русские кодировки можно задать в MySQL икак определить кодировку текстового файла
экспортированного из Access?
2)кроме того проблема присутствовавшая изначально
таблица задана как CREATE TABLE (id int,fam varchar(20)) character set=utf8;
при вводе тексового файла имеющего вид:
105    Иванова
106    Жукова
(разделитель табуляция)  SELECT * выводит:
ID   | FAM     |
------------------------
105 | |И|в|а|н|о|в|а
  6  |  |Ж| |к|о|ва
----------------------
куда -то съедаются цифры 10 в поле ID=106 - это было изначально
не помогал синтаксис create table (ID int(3), varchar(20));

Неактивен

 

#10 09.11.2007 10:56:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Импорт текстовых файлов с русскими символами в MySQL

Как вариант определения кодировки в Windows - переименовать файл в .txt, открыть вордом как формат кодированный текст и перебирать кодировку. Есть еще программа Shtirlitz, которая определяет кодировку русского текста. В MySQL есть utf8, cp1251, koi8r, cp866 (см. SHOW CHARSET)

Неактивен

 

#11 09.11.2007 12:02:16

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

eugira написал:

1)Да у меня версия 5.0.34 и там нет в load data character set
2) я всё-таки допёр, что создавать табл надо в синтаксисе
CREATE TABLE tb(id int,fam varchar(20)) character set=cp1251;
при этом show table показывает именно cp1251, но новая проблема - при загрузке по load data
поля с русским текстом отображаются при SELECT * from tb; как ????

а вы чем смотрите то?
похоже теперь ваш клиент работает не в той кодировке, в которой ваши таблицы (теперь cp1251)

если ваши файлы в cp1251 (под windows - 99% что это так) - то делайте таблицы в cp1251, кто то может посчитать это неспортивным, но есть и другие точки зрения, в частности бессмысленно использовать utf-8 там где нет национальной многоязыковости, ниче особенного он не дает, кроме универсальности (зато жрет в 2 раза больше места smile)

Но думаю вам лучше это отложить на потом, когда разберетесь получше в кодировках и пр. Таблицы всегда можно сконвертировать в UTF8 в любой момент.

Неактивен

 

#12 09.11.2007 12:06:07

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

eugira написал:

------------------------
105 | |И|в|а|н|о|в|а
  6  |  |Ж| |к|о|ва
----------------------
куда -то съедаются цифры 10 в поле ID=106 - это было изначально
не помогал синтаксис create table (ID int(3), varchar(20));

вот это вообще непонятно smile
цифры не зависят от кодировок - у вас еще что то не так...

Неактивен

 

#13 09.11.2007 12:35:35

eugira
Участник
Зарегистрирован: 08.11.2007
Сообщений: 6

Re: Импорт текстовых файлов с русскими символами в MySQL

1А вообще какие разделители при загрузке текстового файла в БД MySQL ?
Табуляция?
а при переносе на следующую строку (следующая запись)
2) хочу сказать, что всё корректно получается при экспорте таблицы из Access через ODBC в MySQL
(при настройках в той SET NAMES utf8);
а если сначала выгружать Access в текстовый файл  и его загружать - то возникают выше описанные проблемы

Неактивен

 

#14 09.11.2007 13:07:39

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

eugira написал:

1А вообще какие разделители при загрузке текстового файла в БД MySQL ?
Табуляция?
а при переносе на следующую строку (следующая запись)
2) хочу сказать, что всё корректно получается при экспорте таблицы из Access через ODBC в MySQL
(при настройках в той SET NAMES utf8);
а если сначала выгружать Access в текстовый файл  и его загружать - то возникают выше описанные проблемы

по умолчанию - tab-delimited, т.е. табуляция разделяет столбцы, а [0D]0A - строки
вы так и не сказали - чем смотрите таблицы в базе, каким клиентом

Неактивен

 

#15 09.11.2007 20:31:01

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Импорт текстовых файлов с русскими символами в MySQL

Вроде как строки по умолчанию разделяются \n, а не \r\n , даже если под Windows - нужно указывать LINES TERMINATED BY '\r\n'

Неактивен

 

#16 09.11.2007 20:44:50

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Импорт текстовых файлов с русскими символами в MySQL

зависит от приложения. некоторые приложения только \r пишут. А если например экспорт был сделан на юниксовой машине а потом скопирован на windows в бинарном режиме, то будет только \n

хотя для файла-экспорта из access скорее всего так - \r\n


Updated. А по умолчанию - да - \n, извиняюсь, отвык от windows.
Кстати, наверно, разработчикам было бы неплохо подкинуть идейку чтобы под windows \r\n был по умолчанию

Отредактированно Shopen (09.11.2007 20:49:18)

Неактивен

 

Board footer

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