MySQL форматирование командной строки с UTF8 - PullRequest
59 голосов
/ 22 июля 2011

У меня есть таблица базы данных, которая содержит шведские / норвежские строки.

Когда я запрашиваю некоторые данные, я получаю вывод, подобный этому:

Вывод с set names latin1;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

Теперь, если I set names utf8;, чтобы увидеть символы с их правильной кодировкой, то форматирование табличного вывода командной строки MySQL прерывается.

Вывод с set names utf8;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

Вопрос:

Это не большая проблема, но она затрудняет чтение выходных данных.Кто-нибудь знает, как сохранить табличное форматирование без изменений?

Ответы [ 2 ]

105 голосов
/ 22 июля 2011

Краткий ответ

Запустите клиент с параметром --default-character-set=utf8:

mysql --default-character-set=utf8

Вы можете установить его по умолчанию в файле /etc/mysql/my.cnf.

[mysql]
default-character-set=utf8

Короткий ответ не сработал, читайте ниже

Приведенная выше команда вынуждает переменные конфигурации character_set_client, character_set_connection и character_set_results быть utf8.

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

show variables like '%char%';

* character_set_database дает вам набор символов текущей базы данных (схемы), в которой вы находитесь. Схема и таблицы созданыпо умолчанию с набором символов, указанным в character_set_server, если это не указано явно в операторе CREATE.

character_set_server можно изменить в файле my.cnf:

[mysqld]
character-set-server = utf8

Кроме того, таблицы и столбцы могут иметь собственную кодировку, которая может отличаться от их родительской таблицы или схемы.Чтобы конкретно проверить значения каждой таблицы и столбца в базе данных, посмотрите этот ответ: Как узнать, какой набор символов используется в базе данных / таблице / столбце MySQL?

Если вы хотите изменитьнабор символов существующих таблиц и столбцов, см. этот ответ: Как преобразовать весь набор символов и сопоставление базы данных MySQL в UTF-8?

Дополнительная информация о наборах символов подключения в mysql docsumentation .

Все установлено на utf8, но я все еще вижу странные символы

Даже если все переменные charsets, таблицы и столбцы установлены на utf8, они могутбыть случаи, когда вы видите странные символы на вашем экране.Например, кто-то мог написать символы Unicode в столбце utf8 через клиента с подключением latin1 (например, с помощью mysql --default-character-set=utf8).В этом случае вам необходимо подключиться к базе данных с той же кодировкой, в которой были записаны значения.Вы также можете получить и переписать их с помощью правильной кодировки.

ПРИМЕЧАНИЕ : Как отмечается в комментариях, кодировка myslq utf8 не является истинной и полной реализацией UTF-8.Если требуется полная реализация UTF-8, можно использовать кодировку utf8mb4:

mysql --default-character-set=utf8mb4

Подробнее здесь: В чем разница между кодировками utf8mb4 и utf8 в MySQL?

0 голосов
/ 22 июля 2011

Эти слова "ø ö ä" с utf8 занимают 2 байта, так что вы забыли использовать строку wchar или utf?

Вот мой тестовый код на python:

s = ["Kid Interiør","Bwg Homes","If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|' 

результат совпадает с распечаткой вашей программы. все, что мне нужно сделать, это изменить кодировку строки s:

s = [u"Kid Interiør",u"Bwg Homes",u"If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|'

результат

| Kid Interiør         |
| Bwg Homes            |
| If Skadeförsäkring   |

Я не тестировал c ++, но предлагаю вам использовать wchar, std :: wcout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...