web-dev-qa-db-ja.com

UTF8を使用したMySQLコマンドラインフォーマット

スウェーデン語/ノルウェー語の文字列を含むデータベーステーブルがあります。

データをクエリすると、次のような出力が得られます。

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                      | 
+-----------------------------------+

質問:

これは大きな問題ではありませんが、出力が少し読みにくくなります。誰もが表形式をそのまま維持する方法を知っていますか?

60
spier

短い答え

オプション--default-character-set=utf8を使用してクライアントを起動します。

mysql --default-character-set=utf8

/etc/mysql/my.cnfファイルでこれをデフォルトとして設定できます。

[mysql]
default-character-set=utf8

短い答えはうまくいきませんでした。

上記のコマンドは、character_set_clientcharacter_set_connection、およびcharacter_set_results構成変数をutf8に強制します。

すべての文字セット関連の構成変数の値を確認するには、次を実行します。

show variables like '%char%';

character_set_databaseは、現在のデータベース(スキーマ)の文字セットを提供します。スキーマとテーブルは、character_set_serverで指定された文字セットでデフォルトで作成されます。 CREATEステートメント。

character_set_servermy.cnfファイルで変更できます:

[mysqld]
character-set-server = utf8

さらに、テーブルと列には、親テーブルまたはスキーマとは異なる独自の文字セットを含めることができます。データベース内の各テーブルと列の値を具体的に確認するには、次の回答を参照してください: MySQLデータベース/テーブル/列の文字セットを確認するにはどうすればよいですか?

既存のテーブルと列の文字セットを変更する場合は、この回答を参照してください: MySQLデータベースの文字セットと照合順序全体をUTF-8に変換する方法

接続文字セットの詳細については、 mysql docsumentation を参照してください。

すべてがutf8に設定されていますが、まだ変な文字が表示されます

すべてのcharsets変数、テーブル、および列がutf8に設定されている場合でも、画面に奇妙な文字が表示される場合があります。たとえば、誰かがutf8接続のクライアントを通じて(たとえばlatin1を実行して)mysql --default-character-set=utf8列にUnicode文字を書き込んだ可能性があります。この場合、値が書き込まれたのと同じ文字セットでデータベースに接続する必要があります。また、正しいエンコーディングを使用してそれらを取得および書き換えることもできます。

[〜#〜] note [〜#〜]:コメントが指摘しているように、myslq utf8エンコーディングは完全ではありませんUTF-8の実装。 UTF-8の完全な実装が必要な場合は、utf8mb4文字セットを使用できます。

mysql --default-character-set=utf8mb4

詳細はこちら: MySQLのutf8mb4とutf8文字セットの違いは何ですか?

106
Martin Taleski