Задавайте вопросы, мы ответим
Вы не зашли.
Таблица MS Access с русскими полями экспортирована в текстовый файл. Кодировка видимо 1251
После импорта в MySQL с помощью Local Data Infile из текстовых полей с русскими полями выводится абракадабра.
Как можно настроить кодировку MySQL 5.0 ? Или как правильно сделать экспорт из MS Access в другую кодировку?
Неактивен
кодировку явно указать пробовали?
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA INFILE 'file_name' INTO TABLE tbl_name CHARACTER SET cp1251 .......
Неактивен
Извините, в MYSQL 5.0 в синтаксисе load data нет character set
кроме этого пробовал сменить кодировку:
set character_set_server=cp1251;
это не помогло
Неактивен
Попробуйте SET NAMES cp1251
и кроме того, убедитесь (SHOW CREATE TABLE имя_таблицы), что таблица создана в cp1251 (или в другой русской кодировке)
Неактивен
к сожалению весь блок команд
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)
Неактивен
ALTER TABLE имя_таблицы CONVERT TO CHARSET cp1251;
Неактивен
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)
Неактивен
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; как ????
Неактивен
Да, ещё я допёр до того, что точно не знаю и не умею определить кодировку текстового файла экспортированного из 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));
Неактивен
Как вариант определения кодировки в Windows - переименовать файл в .txt, открыть вордом как формат кодированный текст и перебирать кодировку. Есть еще программа Shtirlitz, которая определяет кодировку русского текста. В MySQL есть utf8, cp1251, koi8r, cp866 (см. SHOW CHARSET)
Неактивен
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 раза больше места )
Но думаю вам лучше это отложить на потом, когда разберетесь получше в кодировках и пр. Таблицы всегда можно сконвертировать в UTF8 в любой момент.
Неактивен
eugira написал:
------------------------
105 | |И|в|а|н|о|в|а
6 | |Ж| |к|о|ва
----------------------
куда -то съедаются цифры 10 в поле ID=106 - это было изначально
не помогал синтаксис create table (ID int(3), varchar(20));
вот это вообще непонятно
цифры не зависят от кодировок - у вас еще что то не так...
Неактивен
1А вообще какие разделители при загрузке текстового файла в БД MySQL ?
Табуляция?
а при переносе на следующую строку (следующая запись)
2) хочу сказать, что всё корректно получается при экспорте таблицы из Access через ODBC в MySQL
(при настройках в той SET NAMES utf8);
а если сначала выгружать Access в текстовый файл и его загружать - то возникают выше описанные проблемы
Неактивен
eugira написал:
1А вообще какие разделители при загрузке текстового файла в БД MySQL ?
Табуляция?
а при переносе на следующую строку (следующая запись)
2) хочу сказать, что всё корректно получается при экспорте таблицы из Access через ODBC в MySQL
(при настройках в той SET NAMES utf8);
а если сначала выгружать Access в текстовый файл и его загружать - то возникают выше описанные проблемы
по умолчанию - tab-delimited, т.е. табуляция разделяет столбцы, а [0D]0A - строки
вы так и не сказали - чем смотрите таблицы в базе, каким клиентом
Неактивен
Вроде как строки по умолчанию разделяются \n, а не \r\n , даже если под Windows - нужно указывать LINES TERMINATED BY '\r\n'
Неактивен
зависит от приложения. некоторые приложения только \r пишут. А если например экспорт был сделан на юниксовой машине а потом скопирован на windows в бинарном режиме, то будет только \n
хотя для файла-экспорта из access скорее всего так - \r\n
Updated. А по умолчанию - да - \n, извиняюсь, отвык от windows.
Кстати, наверно, разработчикам было бы неплохо подкинуть идейку чтобы под windows \r\n был по умолчанию
Отредактированно Shopen (09.11.2007 20:49:18)
Неактивен