ホームページ  >  記事  >  運用・保守  >  Docker での mysql 文字化けコードの問題を分析して解決する

Docker での mysql 文字化けコードの問題を分析して解決する

PHPz
PHPzオリジナル
2023-04-25 09:19:201541ブラウズ

Docker は、アプリケーションのデプロイと管理をより簡単かつ効率的に行う、人気のあるコンテナ化プラットフォームです。 MySQL データベースは、多くのアプリケーションにとって不可欠な部分です。ただし、Docker で MySQL を使用すると、文字化けが発生することがあります。これは、データの正確性に影響を与えるだけでなく、開発者に無用なトラブルをもたらします。

この記事では、Docker における MySQL の文字化け問題とその解決策を紹介します。

1. Docker における MySQL のコード化け問題

コード化けとは、クライアントでクエリされたデータが期待を満たしておらず、認識できない文字や動作がいくつかあることを意味します。

この問題は、Docker で MySQL を実行する場合に非常に一般的です。特に、MySQL データベースのエンコード方式が UTF-8 に設定されている場合、次の状況が発生する可能性があります:

1. データを挿入すると、データの通常の中国語またはその他の言語の文字がランダムな文字になります。

2. クライアントがデータをクエリすると、返されるデータには大量の文字化けが含まれます。

実際には、これらの問題は Docker や MySQL 自体が原因ではなく、いくつかの誤った設定や構成が原因で発生します。

2. Docker での MySQL の解決策

1. データ ソースの文字セットを確認する

文字化けの根本原因は、データベースの文字セットが一致していないことです。データソースの文字セット。異なるシステム間でのデータ転送の正確性を確保するには、データ ソースの文字セットが UTF-8 であるかどうかを確認する必要があります。

MySQL で次のコマンドを実行して、MySQL のデフォルトの文字セットを確認します:

show variables like 'character%';

表示結果のcharacter_set_client、character_set_connection、character_set_results はすべて utf8mb4 である必要があります。そうでない場合は、文字化けが発生する可能性があります。

Docker で MySQL を実行するには、次のパラメータを Dockerfile または Docker-compose 構成ファイルに追加する必要があります:

...
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_DATABASE: test
  MYSQL_USER: test
  MYSQL_PASSWORD: test
  MYSQL_CHARSET: utf8mb4
  MYSQL_COLLATION: utf8mb4_unicode_ci
...

このうち、MYSQL_CHARSET と MYSQL_COLLATION はそれぞれ文字セットと並べ替え方法です。 。

2. MySQL 構成ファイルを変更する

Docker で MySQL を実行する場合、正しい文字セットとソート方法を実現するために MySQL 構成ファイルを変更することもできます。

MySQL 構成ファイル my.cnf を入力し、次の構成を最後に追加します:

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake

Docker で MySQL を実行するには、まず my.cnf をコンテナーにコピーする必要があります:

...
volumes:
  - ./my.cnf:/etc/mysql/conf.d/my.cnf
...

3. MySQL クライアントの文字セットを確認する

Docker で MySQL を実行する場合、クライアント (オペレーティング システムや MySQL クライアント ツールなど) の文字セットを確認する必要があります。もUTF-8です。

Linux では、次のコマンドを使用して現在のシステムの文字セットを確認できます:

$ echo $LANG

LANG が他の文字セットを返す場合は、LANG 環境変数をシェル設定に追加する必要があります。ファイル:

$ echo "export LANG='en_US.utf8'" >> ~/.bashrc

Windows システムでは、クライアント ツール (Navicat など) の文字セットも UTF-8 であることを確認する必要があります。

4. MySQL の列属性を設定する

MySQL では、列属性の文字セットと照合規則もクエリ結果の正確さに影響します。デフォルトでは、新しい MySQL テーブルの列プロパティは MySQL サーバーのデフォルト設定を採用します。 MySQLサーバーの文字セットと照合順序が一致していないと文字化けが発生する可能性があります。

この問題を解決するには、列属性を手動で次のように設定します。

CREATE TABLE test (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
...
);

上記は、Docker における MySQL の文字化け問題に対するいくつかの解決策です。開発者は、自分のニーズと実際の状況に応じて、自分に合った方法を選択できます。運用環境では、システムの安定性と信頼性を確保するために、アプリケーションの展開と構成を慎重にテストして検証する必要があります。

以上がDocker での mysql 文字化けコードの問題を分析して解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。