1. ホーム
  2. mysql

UTF8によるMySQLコマンドラインフォーマット

2023-11-17 02:34:07

質問

スウェーデン語/ノルウェー語の文字列を含むデータベーステーブルを持っています。

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

出力に 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                      | 
+-----------------------------------+

質問です。

これは大きな問題ではありませんが、出力が少し読みづらくなっています。表形式の書式を維持する方法をどなたかご存知でしょうか?

どのように解決するのですか?

短い答え

オプションでクライアントを起動する --default-character-set=utf8 :

mysql --default-character-set=utf8

これをデフォルトで設定するには /etc/mysql/my.cnf ファイルで設定できます。

[mysql]
default-character-set=utf8

短い答えは動作しませんでした、以下をお読みください。

上のコマンドは強制的に character_set_client , character_set_connectioncharacter_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に設定されていますが、まだ奇妙な文字が表示されます。

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

注意 : コメントで指摘されているように、mysql の utf8 エンコーディングは UTF-8 の真の完全な実装ではありません。もし UTF-8 の完全な実装が必要な場合は utf8mb4 文字セットを使用することができます。

mysql --default-character-set=utf8mb4

詳しくはこちら MySQLのutf8mb4とutf8 charsetsの違いは何ですか?