ホームページ  >  記事  >  Java  >  Javaでjdbc経由でデータベースに接続すると中国語が文字化けする問題の解決方法

Javaでjdbc経由でデータベースに接続すると中国語が文字化けする問題の解決方法

WBOY
WBOY転載
2023-04-26 14:04:081958ブラウズ

1. jdbc を使用してデータベースに接続します。データベースに挿入すると、データ内のデータが文字化けして「???」

2 つ表示されます。解決策:

1. サーバー側の mysql 設定ファイルを変更し、my.cnf ファイルを編集し、[mysqld] の下に行character_set_server = utf8 を追加して、mysql サービスを再起動します。

2. jdbc 接続を使用する場合は、正しいエンコーディング、jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8

2 を指定してください。character_set_server = utf8 が設定されている理由? jdbc に接続するときにエンコーディングを指定する必要はありません

公式ドキュメントを確認してください。jdbc がデータベースに接続するとき、最初にサーバーのcharacter_set_server 値をクエリし、次にエンコーディングを決定します。接続するときに使用します。クライアントの自動検出エンコーディング機能をオーバーライドするには、characterEncoding 属性を使用できます。

ドキュメント アドレス: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference- charsets .html

3. MYSQL の文字処理メカニズムは何ですか? jdbc がエンコーディングを指定しないのはなぜですか? またはサーバーが文字化けの原因となるcharacter_set_server=utf8 を設定しないのはなぜですか

最初に確認してください MYSQL 文字セット

Javaでjdbc経由でデータベースに接続すると中国語が文字化けする問題の解決方法

これらのパラメータについて説明します:

character_set_client: クライアント ソース データで使用される文字セット

character_set_connection: 接続層の文字セット
character_set_database: 現在選択されているデータベースのデフォルトの文字セット
character_set_filesystem: OS 上のファイル名をこの文字セットに変換します。デフォルトのバイナリは変換を行いません
Character_set_results: クエリ結果の文字セット
character_set_server: デフォルトの内部動作文字セット
character_set_system: システム メタデータ文字セット
character_sets_dir: 文字セットのパス

mysql 設定を変更するサーバー側のファイルを編集し、 my.cnf ファイルを編集し、 [mysqld] の下に 行character_set_server = utf8 を追加し、mysql サービスを再起動して、文字セットをクエリします。

Javaでjdbc経由でデータベースに接続すると中国語が文字化けする問題の解決方法

次に、文字セットの変換プロセスを理解します。

データの挿入:

サーバーは、クライアント (character_set_client) 文字セットからのデータをcharacter_set_connection に変換し、 Character_set_connection の文字セットを対応する文字セットに割り当ててディスクに格納します。この文字セットは、

1 の優先順位に従って判断されます。テーブル作成時に設定された文字セット

2. ライブラリ作成時の文字セットセット

3.character_set_database 文字セット

4.character_set_server 文字セット

クエリデータ:

サーバーは、ディスクに保存されている文字セットのデータをcharacter_set_results文字セットに変換し、クライアントに返します

そして分析

1. jdbcは設定されませんCharacterEncoding=utf8、サーバーのcharacter_set_serverはlatin1、jdbcはlatin1キャラクタ・セットでデータベースに接続し、データベース・サービスは最後にlatin1をutf8に変換してディスクに保存します(character_set_connectionと作成テーブルで指定されたキャラクタ・セットは両方とも utf8)、これにより文字化けが発生します

2。JDBC がcharacterEncoding=utf8 を設定せず、サーバーのcharacter_set_server が utf8 であるか、jdbc がcharacterEncoding=utf8 を設定し、jdbc がデータベースへの接続に utf8 文字セットを使用します。データベース サーバーはそれを utf8 でディスクに保存します。この時点では、データは正常です。

以上がJavaでjdbc経由でデータベースに接続すると中国語が文字化けする問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。