Maison  >  Article  >  Java  >  Solution Java aux données tronquées insérées dans MySQL

Solution Java aux données tronquées insérées dans MySQL

黄舟
黄舟original
2017-09-21 10:03:471751parcourir

Cet article présente principalement en détail la solution au problème de l'insertion de données tronquées par Java dans MySQL. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Lorsqu'ils rencontrent l'insertion de Java dans MySQL Comment résoudre le problème. problème de données tronquées ?

L'encodage par défaut de MySQL est latin1


mysql> show variables like 'character%'; 
+--------------------------+--------------------------+ 
| Variable_name      | Value          | 
+--------------------------+--------------------------+ 
| character_set_client   | latin1          | 
| character_set_connection | latin1          | 
| character_set_database  | latin1          | 
| character_set_filesystem | binary          | 
| character_set_results  | latin1          | 
| character_set_server   | latin1          | 
| character_set_system   | utf8           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+

Créez une table de données et insérez des données


mysql> use test; 
mysql> create table messages ( 
  -> id int(4) unsigned auto_increment primary key, 
  -> message varchar(50) not null
  -> ) engine=myisam default charset=utf8; 
mysql> insert into messages (message) values ("测试MySQL中文显示"); 
mysql> select * from messages; 
+----+-------------------+ 
| id | message      | 
+----+-------------------+ 
| 1 | 测试MySQL中文显示 | 
+----+-------------------+

Ecriture d'un programme (Java)


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
 
public class JDBCTest { 
  public static void main(String[] args) { 
    String driver = "com.mysql.jdbc.Driver"; 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String user = "root"; 
    String password = "root"; 
 
    try { 
      Class.forName(driver); 
      Connection conn = DriverManager.getConnection(url, user, password); 
      Statement stmt = conn.createStatement(); 
      stmt.executeUpdate("insert into messages (message) values ('测试MySQL编码')"); 
      ResultSet rs = stmt.executeQuery("select * from messages"); 
      while (rs.next()) { 
        int id = rs.getInt("id"); 
        String message = rs.getString("message"); 
        System.out.println(id + " " + message); 
      } 
 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
}

Sortie du programme

1 ????MySQL?????????
2 ??MySQL??  

Nous voyons que même si nous pouvons ajouter et afficher le chinois normalement lors de l'utilisation de la base de données, Lorsque lors de l'utilisation d'un programme pour se connecter à la base de données, le chinois ne peut pas être affiché normalement. Pour cette raison, nous devons modifier l'encodage par défaut de MySQL et éditer le fichier my.ini (fichier de configuration MySQL) pour modifier l'encodage
<.>

Définir les caractères par défaut de MySQL L'ensemble est utf8, recherchez la configuration client [client] et ajoutez-la ci-dessous.


default-character-set=utf8

Trouvez la configuration du serveur [mysqld] et ajoutez ci-dessous


default-character-set=utf8

Définissez la base de données MySQL pour qu'elle s'exécute avec l'encodage utf8, utilisez l'encodage utf8 lors de la connexion à la base de données MySQL

Arrêtez et redémarrez MySQL

net stop mysqlnet start mysql

Reconnectez-vous à la base de données, vérifiez l'encodage et le contenu de la table de données


mysql> show variables like &#39;character%&#39;; 
+--------------------------+--------------------------+ 
| Variable_name      | Value          | 
+--------------------------+--------------------------+ 
| character_set_client   | utf8           | 
| character_set_connection | utf8           | 
| character_set_database  | utf8           | 
| character_set_filesystem | binary          | 
| character_set_results  | utf8           | 
| character_set_server   | utf8           | 
| character_set_system   | utf8           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+ 
mysql> use test; 
mysql> select * from messages; 
+----+-------------------------------+ 
| id | message            | 
+----+-------------------------------+ 
| 1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮       | 
| 2 | ??MySQL??           | 
+----+-------------------------------+
L'affichage ici est toujours tronqué, principalement parce que l'encodage utilisé auparavant était différent, réexécutez le programme écrit auparavant : java JDBCTest


1 ????MySQL?????????2. ??MySQL??
3 Testez le codage MySQL

Dès le troisième enregistrement, nous pouvons voir que le programme peut désormais ajouter et afficher le chinois normalement lors de la connexion à la base de données



mysql> select * from messages; 
+----+-------------------------------+ 
| id | message            | 
+----+-------------------------------+ 
| 1 | 虏芒脢脭MySQL脰脨脦脛脧脭脢戮       | 
| 2 | ??MySQL??           | 
| 3 | 娴嬭瘯MySQL缂栫爜         | 
+----+-------------------------------+
En regardant l'affichage de la base de données, nous serons très surpris de découvrir pourquoi les caractères affichés sont tous tronqués. Ceci est principalement lié à l'encodage de la commande. sous Windows. Vérifiez les propriétés sur la ligne de commande -> page de code actuelle de l'option : 936 (ANSI/OEM - GBK chinois simplifié) (C'est ainsi que cela s'affiche sur ma machine)

C'est-à-dire l'encodage GBK. est utilisé sur la ligne de commande, et nous utilisons utf8 pour l'ajouter lorsque le programme est connecté. Il y aura donc des caractères tronqués. Essayons maintenant de changer l'encodage du client en gb2312 ou gbk


.

mysql> show variables like &#39;character%&#39;; 
+--------------------------+--------------------------+ 
| Variable_name      | Value          | 
+--------------------------+--------------------------+ 
| character_set_client   | gb2312          | 
| character_set_connection | gb2312          | 
| character_set_database  | utf8           | 
| character_set_filesystem | binary          | 
| character_set_results  | gb2312          | 
| character_set_server   | utf8           | 
| character_set_system   | utf8           | 
| character_sets_dir    | D:\MySQL\share\charsets\ | 
+--------------------------+--------------------------+ 
mysql> use test; 
mysql> select * from messages; 
+----+-------------------+ 
| id | message      | 
+----+-------------------+ 
| 1 | ????MySQL???????? | 
| 2 | ??MySQL??     | 
| 3 | 测试MySQL编码   | 
+----+-------------------+
Vous pouvez maintenant voir que le chinois s'affiche normalement (principalement à cause de utf8 Prend également en charge le chinois), donc lorsque nous utilisons l'outil de ligne de commande pour nous connecter à la base de données, il est préférable de modifier l'encodage du client si vous le souhaitez. utiliser une interface graphique, ce n'est pas nécessaire. En même temps, après avoir modifié l'encodage du client, le programme peut toujours s'afficher normalement (les deux points ci-dessus ont été testés)

Donc si on veut afficher le chinois dans le programme, nous pouvons choisir trois encodages : utf8, gb2312 et gbk. Cependant, si nous voulons ajouter des données chinoises ou les afficher sur la ligne de commande, nous devons définir l'encodage du client sur gb2312. Ou gbk, encore une fois, c'est lié au Encodage CMD.

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!

Déclaration:
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