JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

最近、統合プロジェクトは古いバージョンのMySQLサーバーに接続する必要があります。Navicatを使用して確認すると、このMySQLサーバーにはデフォルトのエンコードが設定されていないようで、このMySQLを操作するいくつかのPHPファイルからはgb2312エンコードを使用しているはずです。ただし、JDBC操作を直接使用すると、データベースから読み取られた中国語の文字がすべて文字化けします。

最初は、entity.setDepartName(new String(rs.getString("hg").getBytes("gbk"), "utf-8")); などのメソッドを使用してエンコーディング変換を強制しようとしましたが、どの方法を使用しても変換された文字は常に文字化けしてしまい、文字化けの仕方が毎回異なっていたため、失敗しました。かなり落ち込んでいます。さらに、このプロジェクトでは他の製品を使用しているため、フィルターなどの追加機能を追加することはできず、この問題に対処するのは簡単ではありません。

Navicat を使用して接続およびクエリを実行する際に問題は発生しなかったため、テーブルを SQL にエクスポートして、DDL にエンコード設定があるかどうかを確認してみました。エンコードがまったく記述されていなかったため、結果は残念なものでした。そこで、エクスポートした sql ファイルの拡張子を html に変更し、IE で開いてみると、文字化けしたコードはありませんでした。エンコード形式を確認すると、「gb2312」であることがわかりました。ただし、Java を使用して強制的にトランスコーディングしても効果はありませんでした。どうすればいいですか?

さらに、このプロジェクトは長年にわたって実行されており、事後のメンテナンスが不足しています。my.ini ファイルを表示および変更することはできません。

突然、MySQL に接続するときにパラメータを追加できることを思い出しました。一部のパラメータではエンコーディングを指定します。これで問題は解決できますか?

したがって、接続文字列 (元の値: url="jdbc:mysql://192.168.18.254:3306/web_oa) を次のように変更します。

url="jdbc:mysql://192.168.18.254:3306/web_oa?useUnicode=true&characterEncoding=gbk"

アプリケーションを再起動して確認すると、OKです。中国語は普通です。

問題は解決しました。

このメソッドは、接続時に実際に gbk エンコード形式を指定するため、クライアントとサーバーが独自のデフォルトのエンコード形式を使用して対話することがなくなります。構成が適切である限り、コードが文字化けする問題は発生しません。

ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • PHP で文字化けした中国語の文字を MySQL に書き込むためのサンプル ソリューション
  • MySQL 文字セットの文字化けとその解決方法
  • Linux での MySQL の文字化け問題の解決方法
  • MySQL にテーブルデータを挿入するときに中国語の文字化けが発生する問題を解決する方法
  • JDBC 接続 mysql の文字化けしたコード例外問題の処理の概要
  • MySQL データベースにおける中国語文字化け問題の詳細な説明
  • MySQLデータベース移行におけるデータ文字化けの問題を解決する

<<:  Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

>>:  React setStateデータ更新メカニズムの詳細な説明

推薦する

js タグ構文の使用法の詳細

目次1. ラベルステートメントの紹介2. ラベルステートメントの使用序文:日常の開発では、プログラム...

Velocity.js はページスクロール切り替え効果を実装します

今日は、複数ページのスクロール切り替え効果を備えた Web サイトを簡単かつ効率的に開発できる、小さ...

Nginx をインストールして複数のドメイン名を設定する方法

Nginx のインストールCentOS 6.x yum にはデフォルトで nginx ソフトウェア ...

Javascript配列の重複排除のいくつかの方法の詳細な説明

目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

CSS3 でクールなスライス画像カルーセル効果を実現

今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...

HTML テーブルタグチュートリアル (45): テーブル本体タグ

<tbody> タグは、テーブル本体のスタイルを定義するために使用されます。基本構文 &...

フロントエンド開発における一般的なテクニックのまとめ

1. 記事タイトルリストの右側に日付を表​​示する方法:コードをコピーコードは次のとおりです。 &l...

SSMプロジェクトは、ホットデプロイメント構成を実装するためにTomcatとMavenを使用してWARパッケージとしてデプロイされることが多い。

背景ご存知のとおり、JavaEE プロジェクトを開発した後は、そのプロジェクトをサーバーの Tomc...

MySQLを使用して列内の異なる値の数をカウントする例

序文この記事で実装されている要件は、実際には非常に一般的です。たとえば、ユーザーが登録したチャネルを...

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

Dockerイメージを構築する2つの方法

目次既存のイメージからイメージを更新します。イメージを最初から構築する: Docker イメージ リ...

Docker に ElasticSearch をインストールする方法を 1 つの記事で解説

目次序文1. Dockerをインストールする2. ElasticSearchをインストールする3. ...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...