Подтвердить что ты не робот

Форматирование командной строки 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                      | 
+-----------------------------------+

Вопрос:

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

4b9b3361

Ответ 1

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

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

mysql --default-character-set=utf8

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

[mysql]
default-character-set=utf8

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

Приведенная выше команда 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.

Все настроено на 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?

Ответ 2

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

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