Maison > Article > développement back-end > Que faire si php lit des caractères tronqués dans MySQL
Solution pour PHP lisant des caractères tronqués à partir de MySQL : 1. Spécifiez le jeu de caractères de la table de base de données lors de la création de la table de base de données ; 2. Définissez le jeu de caractères de MySQL 3. Définissez le codage de caractères par défaut utilisé lors de la transmission ; caractères entre les bases de données ; 4. , Définissez le jeu de caractères utilisé par la page HTML ; 5. Définissez le jeu de caractères utilisé par le fichier texte php.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Un résumé du problème de code mysql tronqué lu par PHP
Lorsque PHP lit mysql, les endroits suivants impliquent le jeu de caractères.
1. Spécifiez le jeu de caractères de la table de base de données lors de la création de la table de base de données. Par exemple
1 create table tablename 2 ( 3 id int not null auto_increment, 4 title varchar(20) not null, 5 primary key ('id') 6 )DEFAULT CHARSET =UTF8;
Si le jeu de caractères de la table n'est pas spécifié lors de la création de la table, le jeu de caractères par défaut de la base de données à laquelle appartient la table est utilisé. Le jeu de caractères est spécifié par Character_set_database.
La méthode pour vérifier le jeu de caractères utilisé par la table de base de données est :
show create table mytable;
(PS : lors de l'établissement de la base de données/table et de l'exécution des opérations de base de données, essayez d'indiquer explicitement le jeu de caractères utilisé au lieu de s'appuyer sur les paramètres par défaut de MySQL, sinon MySQL pourrait causer de gros problèmes lors de la mise à niveau [1])
2. Le jeu de caractères de MySQL
Il y a trois variables importantes dans MySQL, Character_set_client, Character_set_results, Character_set_connection. .
En définissant Character_set_client, indiquez à Mysql quelle méthode d'encodage PHP stocke dans la base de données.
En définissant Character_set_results, indiquez à Mysql quel type de données codées PHP doit obtenir.
En définissant Character_set_connection, indiquez à Mysql quel encodage utiliser pour le texte dans la requête PHP.
3. Après vous être connecté à la base de données, définissez le codage de caractères par défaut utilisé lors de la transmission des caractères entre les bases de données.
Utilisez mysqli::set_charset() ou mysqli::query('set names utf8') pour définir.
Essayez d'utiliser mysqli::set_charset(mysqli:set_charset) au lieu de "SET NAMES" (reportez-vous à cet article)
$db = new mysqli('localhost','user','passwd','database_name'); $db->set_charset('utf8');
Notez qu'il s'agit d'utf8, pas d'utf-8
(Un problème ici est que la base de données et PHP ont un encodage unifié, mais si la fonction mysqli::set_charset() n'est pas appelée, des caractères tronqués apparaîtront toujours lors de la lecture des données. Pourquoi ?)
(另,set names utf8相当于下面三句 SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; )
4. Le jeu de caractères utilisé par la page html. Définissez
<meta http-equiv="content-type" content="text/html; charset=utf-8">
5 dans la balise méta. Le jeu de caractères utilisé par le fichier texte php.
Vous pouvez utiliser vim pour ouvrir le fichier sous Linux, entrez
:set encoding
pour afficher le jeu de caractères utilisé par le fichier
Pour vous assurer qu'il n'y a pas de code tronqué, vous Si vous devez vous assurer que l'encodage du fichier lui-même est spécifié dans l'encodage HTML, PHP indique que l'encodage de Mysql (y compris Character_set_client et Character_set_results) doit être unifié. Utilisez également la fonction mysqli:set_charset() ou "SET NAMES".
En réponse à la question après "3", j'ai écrit plusieurs exemples pour tester les résultats de la définition et de la non-définition du jeu de caractères après la liaison à la base de données. Environnement de test Ubuntu 12.04, MySQL 5.5, php 5.5.7.
Les résultats sont les suivants :
(1) Le jeu de caractères de la table de base de données est utf8 Sans utiliser de noms de jeu, utf8
peut insérer et lire le chinois normalement, mais. les caractères tronqués sont affichés dans mysql.
(2) Le jeu de caractères de la table de base de données est utf8. En utilisant les noms d'ensemble, utf8
peut insérer et lire le chinois normalement, et l'affichage dans mysql est correct.
(3) Caractères de la table de base de données L'ensemble n'est pas utf8. Utilisez les noms d'ensemble utf8
pour l'afficher dans MySQL, et tous les mots seront lus comme des points d'interrogation.
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!