Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi mes chaînes UTF-8 s'affichent-elles sous forme de caractères corrompus lors de leur insertion dans MySQL à l'aide de JDBC ?

Barbara Streisand
Libérer: 2024-11-01 18:03:02
original
211 Les gens l'ont consulté

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

Comment insérer correctement des chaînes UTF-8 dans MySQL via JDBC

Énoncé du problème :

Lors de l'insertion de chaînes UTF-8 dans une base de données MySQL à l'aide de l'interface JDBC, les caractères s'affichent sous forme de symboles corrompus ou illisibles.

Chaîne attendue : Апарати
Résultat réel : ???????

Dépannage initial :

<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>
Copier après la connexion

Dépannage supplémentaire :

Ces mesures ont été prises en plus :

  • Ajout des lignes suggérées par Costis Aivalis à /etc/mysql/my.cnf.
  • Suppression des lignes suivantes du code :

    <code class="java">query = "set character set utf8";
    stat.execute(query);</code>
    Copier après la connexion

Solution :

Il est apparu que la source de divergence entre le code Java et les données de la table MySQL était due à des incohérences dans les jeux de caractères. Le problème a été résolu lorsque les paramètres du jeu de caractères dans le code Java ont été supprimés.

En comparant la commande MySQL utilisée dans le code Java à la commande analogue de l'invite de commande, une différence subtile a été découverte :

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

Dans le code Java, le suffixe utf8 du jeu de caractères a été omis de l'instruction create table. Cette divergence entre le code Java et la commande MySQL directe crée une inadéquation dans la gestion du jeu de caractères.

Conclusion :

Lors de l'insertion de chaînes UTF-8 dans MySQL à l'aide de l'interface JDBC, il est essentiel de s'assurer que les paramètres du jeu de caractères sont cohérents entre le code Java et la configuration de la base de données. Cela garantit que les chaînes sont correctement traitées et stockées dans la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal