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
<.>
default-character-set=utf8
default-character-set=utf8
Arrêtez et redémarrez MySQL
net stop mysqlnet start mysql
mysql> show variables like 'character%'; +--------------------------+--------------------------+ | 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
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 'character%'; +--------------------------+--------------------------+ | 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!