В какой кодировке команда оболочки [mysql -e "..." -u ...> some_file.sql] сохраняет содержимое в some_file.sql? - PullRequest
0 голосов
/ 05 августа 2011

Я хотел экспортировать результаты определенного запроса в файл и поэтому выдал команду оболочки

mysql -e "SELECT some, thing FROM some_where" -u my_user -p my_database > some_file.sql

Я должен отметить, что таблица и столбцы хранятся в utf8. При попытке перебрать строки по этому коду Python

with codecs.open(PATH_TO_SQL_FILE, 'r', 'utf8') as read_file:
    for line in read_file:
        print line

Я получаю ошибку:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 1: invalid continuation byte

Если я уберу использование codecs, сценарий завершится без ошибок, но я получаю в терминале такие вещи, как:

Zolt�n L�szl�

Что мне не хватает? Должен ли я использовать другой кодек? Как определить, какой кодек использовать для декодирования? Все советы приветствуются!

Кстати, если я открою файл some_file.sql с vi в терминале, каждый диакритический знак будет показан правильно.

1 Ответ

1 голос
/ 05 августа 2011

mysql использует Latin-1 в качестве набора символов по умолчанию, если вы не укажете обратное. Вы можете либо декодировать из iso-8859-1 в python, либо использовать:

mysql --default-character-set=utf-8 -e "SELECT some, thing FROM some_where" -u my_user -p my_database > some_file.sql
...