Résolvez le problème des caractères tronqués de mysql php : 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 ; encodage de caractères par défaut utilisé lors de la transmission de caractères entre bases de données ;4. Définissez le jeu de caractères utilisé par la page HTML.
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
create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )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 d'une base de données/table et de l'exécution d'opérations de base de données, essayez d'indiquer explicitement le jeu de caractères utilisé au lieu de vous fier à Paramètres par défaut de MySQL, sinon MySQL peut causer de gros problèmes lors de la mise à niveau [1])
2. Le jeu de caractères de MySQL
Il existe trois variables importantes dans MySQL, Character_set_client, Character_set_results et 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
(Il y a un problème ici. , la base de données et PHP ont unifié l'encodage, 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 )
(De plus, définir les noms. utf8 est équivalent aux trois phrases suivantes.
SET Character_set_client = utf8;
SET Character_set_results = utf8;
SET Character_set_connection =
)
4. 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, saisissez
: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 devez vous assurer que le fichier lui-même est encodé, HTML L'encodage spécifié dans PHP indique à Mysql d'unifier l'encodage (y compris Character_set_client et Character_set_results). 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 les noms de jeu utf8
, le chinois peut être inséré et lu 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. Utilisez les noms de jeu utf8
pour insérer et lire le chinois normalement. L'affichage dans MySQL est correct
(3) Le jeu de caractères. de la table de base de données n'est pas utf8. Utilisez les noms d'ensemble utf8
mysql Dans l'affichage, les lectures sont toutes des points d'interrogation.
Site Web PHP chinois !
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!