MySQL データベースの文字化け問題の原因と解決策

MySQL データベースの文字化け問題の原因と解決策

序文

データベースのデータを表示すると、文字化けした文字が表示されることがあります。実際、どのようなデータベースであっても、文字化けした文字が表示される場合は、データベースの文字セット設定に問題があることがほとんどです。

次に、データベースの文字セットの設定とコード文字化け問題の解決方法を紹介します。

MySQLデータベースの文字セット

簡単に言うと、文字は 1 つの単語、エンコーディングは各単語に割り当てられた番号、文字セットは文字とエンコーディングの集合、検証ルールは文字セットに対応するソートルールです。文字セットと対応する検証ルールの組み合わせが言語です。 (各文字セットには複数の照合順序を設定できますが、デフォルトの照合順序が存在します)

MySQL データベースは、文字セットを設定することで、対応する文字セットと検証ルールを使用して文字を整理できます。それは、その言語を使って記事を解釈するようなものです。たとえば、中国人がよく使用する utf8 エンコーディングは中国語を表します。

MySQL は複数の文字セットをサポートできます。同じデータベース内の異なるテーブルや、同じテーブル内の異なるフィールドでは、異なる文字セットを使用するように指定できます。

MySQL 文字セットルール

mysql が設定できる文字セットは次のとおりです。

  1. サーバーの文字セット
  2. データベースの文字セット
  3. 文字セット単語
  4. セグメント文字セット

文字セットがレベルで設定されていない場合は、その上のレベルの文字セットを継承します。

MySQL データベースの文字化け問題を解決する方法 (つまり、文字セットを変更する方法)

【1】MySQLでサポートされている文字セットを確認する

文字セットを表示します。

ここに写真の説明を記入してください

【2】データベースコードを確認する

'character_set%' のような変数を表示します。

ここに写真の説明を記入してください

【3】MySQLで現在使用されている文字セットを表示する

'character%' のような変数を表示します。

ここに写真の説明を記入してください

分析:

character_set_client: クライアント要求データの文字セット

character_set_connection: クライアントとサーバーの接続の文字セット

character_set_database: デフォルト データベースの文字セット。デフォルト データベースがない場合は、character_set_server で指定された文字セットが使用されます (勝手に変更しないことを推奨します)

character_set_filesystem: character_set_client を character_set_filesystem に変換します (デフォルトはバイナリで、変換は行われません)

character_set_results: クライアントに返される文字セット

character_set_server: データベースサーバーのデフォルトの文字セット

character_set_system: システム文字セット。デフォルトは utf8 です。 (カタログ テーブルに格納されているデータベース テーブル、列、関数の名前)

character_sets_dir: MySQL 文字セットファイルの保存パス

文字化けの原因

character_set_clientが実際のものと一致しません
character_set_results がクライアント ページと一致しません

【4】現在のデータベースの校正ルールを表示する

'collat​​ion%' のような変数を表示します。

ここに写真の説明を記入してください

分析:

値の命名規則: 文字セット名 + 言語 + 接尾辞

collat​​ion_connection : 現在の接続の文字セット

collat​​ion_database : 現在の日付のデフォルトの照合順序

collat​​ion_server : サーバーのデフォルトの照合順序

接尾辞の意味:
ci: 大文字と小文字を区別しない
cs: 大文字と小文字を区別する
bin: バイナリソート

【5】文字セットの変更

文字化けした問題を解決する(一般的には以下のとおり)

<1> 一時的(現時点でのみ有効で、終了して再度入ると元の設定に戻ります)

character_set_client = 'utf8' を設定します。
文字セット接続を 'utf8' に設定します。
character_set_results = 'utf8' を設定します。

または

名前をutf8に設定します。

<2>永続的(設定ファイルを変更した後、MySQLを再起動する必要があります)
mysql の my.cnf 構成ファイルに以下を変更または追加します。

[クライアント]
デフォルトの文字セット = utf8 

[mysqld]
文字セットサーバー = utf8 


[mysql]
デフォルトの文字セット = utf8

述べる

<1>
mysqld以下のパラメータについては、mysql5.5で検証した結果、以下の書き方はいずれも許容されており、アンダースコアによる変更の失敗もありません。

文字セットサーバー = utf8
文字セットサーバー = utf8

<2>
設定ファイルの変更に関しては、コンパイルやインストールにより、mysql 設定ファイルが必ずしも /etc/my.cnf ではない場合があり、変更が成功しないことがあります。

<3>
設定ファイルを変更したら、mysql を再起動します。文字セットと照合規則が次のとおりであるかどうかを確認してください。

以下は成功です。Navicat などのサードパーティツールを使用して接続すると、中国語の文字がまだ文字化けします。ツールのエンコードを変更してみてください。

ここに画像の説明を挿入

ここに画像の説明を挿入

これで、MySQL データベースの文字化け問題の原因と解決策に関するこの記事は終わりです。MySQL データベースの文字化けに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 文字セットの表示と変更のチュートリアル
  • MySQLの文字セットを変更する方法
  • MySQL の文字セット utf8 を utf8mb4 に変更する方法
  • 既存のMySQLデータベースの文字セットを統一する方法
  • MySQL 文字セットの文字化けとその解決方法
  • MySQL utf8mb4 文字セットの JDBC 処理の詳細な説明
  • フィールドの文字セットの違いによる MySQL のインデックス失敗の解決策
  • MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法
  • Docker で MySQL の文字セットを設定する方法
  • MySQLクエリの文字セットの不一致の問題を解決する方法
  • MySQLの文字セットと検証ルールの詳細な説明

<<:  Linux 脆弱性スキャンツール lynis の使用分析

>>:  Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

推薦する

Vue+Element+Springboot画像アップロードの実装例

最近、たまたま vue+springboot のフロントエンドとバックエンドの分離プロジェクトに触れ...

Alibaba Cloud Server Linux システムは Tomcat を構築して Web プロジェクトを展開します

私は全体のプロセスを 4 つのステップに分けます。 JDKをダウンロードしてインストールするTomc...

npm グローバル モジュールのデフォルトのインストール パスを変更するためにノードのインストールをカスタマイズする手順

node を D ドライブにインストールしましたが、C ドライブのスペースを占有したくなかったため、...

div 内の img と span の垂直方向の中央揃えの問題について

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...

Docker ケース分析: Redis サービスの構築

目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...

CSS3アニメーションを使用して、小さい円から大きい円に拡大し、外側に広がる効果を実現する例

序文この記事では、CSS3アニメーションを使用して、円が小さいものから大きく拡大し、外側に広がる効果...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

2048 ゲームを実装するためのネイティブ js

2048ミニゲーム、参考までに具体的な内容は以下のとおりですまず、2048ゲームは16のグリッドか...

動的なテーブル効果を実現するJavaScript

この記事では、動的なテーブル効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Docker で Java 8 Spring Boot アプリケーションを開発する方法

この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...

Dockerのオンラインおよびオフラインインストールと一般的なコマンド操作

1. テスト環境名前バージョンセント7.6ドッカー18.09.06 2. オンラインインストールここ...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

MySQL トリガー構文とアプリケーション例

この記事では、例を使用して MySQL トリガーの構文とアプリケーションを説明します。ご参考までに、...

MySQLで適切なインデックスを選択する方法

まずは栗を見てみましょう EXPLAIN select * from employees where...