スウェーデン語/ノルウェー語の文字列を含むデータベーステーブルがあります。
データをクエリすると、次のような出力が得られます。
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_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 を参照してください。
すべての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文字セットの違いは何ですか?