Heim >Datenbank >MySQL-Tutorial >Warum werden meine UTF-8-Zeichenfolgen beim Einfügen in MySQL mithilfe von JDBC als beschädigte Zeichen angezeigt?

Warum werden meine UTF-8-Zeichenfolgen beim Einfügen in MySQL mithilfe von JDBC als beschädigte Zeichen angezeigt?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 18:03:02263Durchsuche

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

So fügen Sie UTF-8-Zeichenfolgen ordnungsgemäß über JDBC in MySQL ein

Problemstellung:

Beim Einfügen von UTF-8-Zeichenfolgen in eine MySQL-Datenbank über die JDBC-Schnittstelle werden die Zeichen als beschädigte oder unlesbare Symbole angezeigt.

Erwartete Zeichenfolge: Апарати
Tatsächliches Ergebnis : ???????

Erste Fehlerbehebung:

<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>

Zusätzliche Fehlerbehebung:

Diese Schritte wurden zusätzlich durchgeführt:

  • Von Costis Aivalis vorgeschlagene Zeilen zu /etc/mysql/my.cnf hinzugefügt.
  • Folgende Zeilen aus dem Code entfernt:

    <code class="java">query = "set character set utf8";
    stat.execute(query);</code>

Lösung:

Es schien, dass die Ursache der Diskrepanz zwischen Java-Code und den MySQL-Tabellendaten auf Inkonsistenzen im Zeichensatz zurückzuführen war. Das Problem wurde behoben, als die Zeichensatzeinstellungen im Java-Code entfernt wurden.

Beim Vergleich des im Java-Code verwendeten MySQL-Befehls mit dem analogen Befehl aus der Eingabeaufforderung wurde ein subtiler Unterschied festgestellt:

<code class="java">String query = "insert into clt" + " (id, text) values (?, ?)";</code>
<code class="bash">mysql> insert into clt (id, text) values (12656697, "Апарати");</code>

Im Java-Code wurde das Zeichensatz-Suffix utf8 in der Anweisung „create table“ weggelassen. Diese Abweichung zwischen dem Java-Code und dem direkten MySQL-Befehl führt zu einer Diskrepanz bei der Zeichensatzverarbeitung.

Fazit:

Beim Einfügen von UTF-8-Strings in MySQL über die JDBC-Schnittstelle ist es wichtig, sicherzustellen, dass die Zeichensatzeinstellungen zwischen dem Java-Code und der Datenbankkonfiguration konsistent sind. Dadurch wird sichergestellt, dass Zeichenfolgen korrekt verarbeitet und in der Datenbank gespeichert werden.

Das obige ist der detaillierte Inhalt vonWarum werden meine UTF-8-Zeichenfolgen beim Einfügen in MySQL mithilfe von JDBC als beschädigte Zeichen angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn