JDBC を使用して MySQL に挿入すると UTF-8 文字列が破損した文字として表示されるのはなぜですか?

Barbara Streisand
リリース: 2024-11-01 18:03:02
オリジナル
144 人が閲覧しました

Why Are My UTF-8 Strings Displaying As Corrupted Characters When Inserting Into MySQL Using JDBC?

JDBC 経由で UTF-8 文字列を MySQL に適切に挿入する方法

問題ステートメント:

JDBC インターフェイスを使用して UTF-8 文字列を MySQL データベースに挿入すると、文字が壊れているか、読めない記号として表示されます。

期待される文字列: Апарати
実際の結果: ???????

初期トラブルシューティング:

<code class="java">Class.forName("com.mysql.jdbc.Driver").newInstance();
String dbPath = String.format(
    "jdbc:mysql://%s:%d/%s?user=%s&amp;password=%s&amp;characterEncoding=utf-8&amp;&quot; + 
    "&amp;useUnicode=true", ci.host, ci.port, ci.dbName, ci.user, ci.password);
conn = java.sql.DriverManager.getConnection(dbPath);</code>
ログイン後にコピー

追加のトラブルシューティング:

これらの手順が追加で実行されました:

  • Cotis Aivalis によって提案された行を /etc/mysql/my.cnf に追加しました。
  • コードから次の行を削除しました:

    <code class="java">query = "set character set utf8";
    stat.execute(query);</code>
    ログイン後にコピー

解決策:

Java コードと MySQL テーブル データ間の不一致の原因は、文字セットの不一致によるものと思われます。この問題は、Java コードの文字セット設定が削除されたことで解決されました。

Java コードで使用されている MySQL コマンドとコマンド プロンプトの類似コマンドを比較すると、次のような微妙な違いが見つかりました。

<code class="java">String query = "insert into clt" + " (id, text) values (?, ?)";</code>
ログイン後にコピー
<code class="bash">mysql> insert into clt (id, text) values (12656697, "Апарати");</code>
ログイン後にコピー

Java コードでは、文字セット utf8 サフィックスが create table ステートメントから省略されていました。Java コードと直接 MySQL コマンドの間のこの相違により、文字セットの処理に不一致が生じます。

結論:

JDBC インターフェイスを使用して UTF-8 文字列を MySQL に挿入する場合、Java コードとデータベース構成の間で文字セット設定が一貫していることを確認することが重要です。これにより、文字列が正しく処理され、データベースに保存されることが保証されます。

以上がJDBC を使用して MySQL に挿入すると UTF-8 文字列が破損した文字として表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!