Maison  >  Article  >  développement back-end  >  Comment résoudre le problème des caractères tronqués lorsque PHP lit la base de données MySQL

Comment résoudre le problème des caractères tronqués lorsque PHP lit la base de données MySQL

一个新手
一个新手original
2017-09-12 10:33:201364parcourir

À propos de la solution aux caractères tronqués lorsque PHP lit la base de données MySQL

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;

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"

  • $db = new mysqli('localhost','user','passwd','database_name');
    $db->set_charset('utf8');

Copier le code
Notez qu'il s'agit d'utf8, pas d'utf-8
(Le problème ici est que la base de données et php ont un encodage unifié, mais sinon Lors de l'appel de la fonction mysqli::set_charset(), des caractères tronqués apparaissent toujours lors de la lecture des données Pourquoi ? )
(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 = utf8; 
)

4. Définissez le jeu de caractères utilisé par la page html dans la balise méta.

  • <meta http-equiv="content-type" content="text/html; charset=utf-8">

复制代码
5. php文本文件所使用的字符集。
在linux下可以用vim打开文件,输入
:set encoding
查看文件使用的字符集

要保证不乱码,需要保证文件自身的编码,HTML里指定的编码,PHP告诉Mysql的编码(包括character_set_client和character_set_results)统一。同时使用mysqli:set_charset()函数或”SET NAMES”。

针对“3”后面的问题,写了几个例子,测试链接数据库后,设置和不设置字符集时的结果。测试环境Ubuntu 12.04,MySQL 5.5,php 5.5.7。
结果如下:
(1) 数据库表字符集是utf8,不使用set names utf8
能正常插入、读出中文,但是在mysql中显示乱码

(2) 数据库表字符集是utf8,使用set names utf8
能正常插入、读出中文,mysql中显示正确

(3) 数据库表字符集不是utf8,使用set names utf8
mysql中显示,读出都是问号。

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