Maison  >  Article  >  Java  >  Solution au problème des caractères chinois tronqués lors de la connexion à la base de données via jdbc en Java

Solution au problème des caractères chinois tronqués lors de la connexion à la base de données via jdbc en Java

WBOY
WBOYavant
2023-04-26 14:04:081973parcourir

1. Utilisez jdbc pour vous connecter à la base de données. Lors de l'insertion dans la base de données, les données dans les données affichent des caractères tronqués et sont "???"

Deux solutions :

1. côté serveur et modifiez mon fichier.cnf, ajoutez une ligne caractère_set_server = utf8 sous [mysqld], puis redémarrez le service mysql

2 Lorsque vous utilisez jdbc pour vous connecter, spécifiez l'encodage correct, jdbc:mysql://127.0. .0.1:3306/test?useUnicode=true&characterEncoding= utf8

2. Pourquoi Character_set_server = utf8 est-il configuré Vous n'avez pas besoin de spécifier l'encodage lors de la connexion à jdbc. Veuillez vous référer à la documentation officielle lors de la connexion à la base de données. , jdbc interrogera d'abord la valeur Character_set_server du serveur, puis déterminera l'encodage à utiliser lors de la connexion. Pour remplacer la fonction d'encodage de détection automatique du client, vous pouvez utiliser l'attribut CharacterEncoding

Adresse du document : https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets.html

3. Quel est le mécanisme de traitement des caractères de MYSQL ? Pourquoi jdbc ne spécifie-t-il pas l'encodage ou le serveur ne définit pas Character_set_server=utf8, ce qui entraînera des caractères tronqués ?

Expliquez ces paramètres :

character_set_client : le jeu de caractères utilisé par les données source du client

character_set_connection : le jeu de caractères de la couche de connexion

character_set_database : le jeu de caractères par défaut de la base de données actuellement sélectionnée

character_set_filesystem : convertit le nom du fichier sur le système d'exploitation en ce jeu de caractères. Le binaire par défaut ne fait rien Converti

character_set_results : jeu de caractères du résultat de la requête Solution au problème des caractères chinois tronqués lors de la connexion à la base de données via jdbc en Javacharacter_set_server : jeu de caractères d'opération interne par défaut

character_set_system : jeu de caractères des métadonnées du système

character_sets_dir : chemin d'accès au jeu de caractères

Modifier le fichier de configuration mysql côté serveur, éditez le fichier my.cnf et ajoutez une ligne caractère_set_server = utf8 sous [mysqld], puis redémarrez le service mysql, puis interrogez le jeu de caractères :




Comprenez ensuite le processus de conversion du jeu de caractères :

Insérer des données :

Le serveur transfère les données au jeu de caractères client (character_set_client) et est converti en caractère_set_connection, puis le jeu de caractères caractère_set_connection est converti en jeu de caractères correspondant et stocké sur le disque. est jugé selon la priorité suivante :

Solution au problème des caractères chinois tronqués lors de la connexion à la base de données via jdbc en Java

1. Le jeu de caractères défini lors de la création de la table

2. Le jeu de caractères défini lors de la création de la bibliothèque

3. Données de requête :

Le serveur convertit les données du jeu de caractères stocké sur le disque en jeu de caractères Character_set_results, retourne au client

puis analyse

1. Jdbc ne définit pas CharacterEncoding=utf8, le serveur Character_set_server est. latin1, jdbc se connecte à la base de données avec le jeu de caractères latin1, et le serveur de base de données convertit latin1 en utf8 puis le stocke sur le disque (car les jeux de caractères spécifiés par Character_set_connection et la table de création sont tous deux utf8), ce qui provoque des caractères tronqués

2. jdbc ne définit pas CharacterEncoding=utf8, le serveur Character_set_server est utf8, ou jdbc définit CharacterEncoding=utf8, et jdbc est connecté à la base de données du jeu de caractères utf8, le serveur de base de données est stocké sur le disque en utf8, alors les données sont normales

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer