Форматирование командной строки MySQL с помощью UTF8


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

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

выход с set names latin1;

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

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

выход с set names utf8;

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

вопрос:

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

2 53

2 ответа:

запустите клиент с опцией --default-character-set=utf8.

mysql --default-character-set=utf8

это заставляет character_set_client,character_set_connection и character_set_results переменные в utf8.

дополнительная информация о наборе символов соединения здесь.

вы можете установить его в качестве параметра по умолчанию в вашем , в [mysql] раздел, который будет включаться автоматически при каждом вызове клиента mysql.

[mysql]
default-character-set=utf8

эти слова "ø ö ä" с 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.