Maison  >  Article  >  développement back-end  >  Comment résoudre le problème des caractères tronqués dans la requête de base de données PHP

Comment résoudre le problème des caractères tronqués dans la requête de base de données PHP

藏色散人
藏色散人original
2020-07-24 09:57:153195parcourir

La solution à la requête tronquée dans la base de données PHP : créez d'abord la base de données dans le client de ligne de commande MySQL ; puis spécifiez le jeu de caractères de la base de données afin que MySQL puisse prendre en charge plusieurs bases de données d'encodage en même temps ; base de données créée.

Comment résoudre le problème des caractères tronqués dans la requête de base de données PHP

Solution de code tronqué

Recommandé : "Tutoriel PHP"

Pour résoudre le problème des caractères tronqués, vous devez d'abord déterminer quel encodage utilise votre base de données. S'il n'est pas spécifié, la valeur par défaut est latin1.

Les trois jeux de caractères que nous utilisons le plus devraient être gb2312, gbk et utf8.

Alors, comment spécifier le jeu de caractères de la base de données ? Ce qui suit est également un exemple de gbk

[Créer une base de données dans le client de ligne de commande MySQL]

mysql> CREATE TABLE `mysqlcode` (
    -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    -> `content` VARCHAR( 255 ) NOT NULL
    -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> desc mysqlcode;
+---------+-----------------------+------+-----+---------+----------------+
| Field   | Type                  | Null | Key | Default | Extra          |
+---------+-----------------------+------+-----+---------+----------------+
| id      | tinyint(255) unsigned | NO   | PRI |         | auto_increment |
| content | varchar(255)          | NO   |     |         |                |
+---------+-----------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

Le TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

est le caractère qui spécifie l'ensemble de base de données, COLLATE (collation), permet à mysql de prendre en charge plusieurs bases de données d'encodage en même temps.

Bien sûr nous pouvons également modifier le jeu de caractères de la base de données via la commande suivante

alter database da_name default character set 'charset'.

Le client l'envoie au format gbk, et la configuration suivante peut être utilisée :

SET character_set_client='gbk'
SET character_set_connection='gbk'
SET character_set_results='gbk'

Cette configuration est équivalente à SET NAMES 'gbk'.

Maintenant, faites fonctionner la base de données qui vient d'être créée

mysql> use test;
Database changed
mysql> insert into mysqlcode values(null,'php爱好者');
ERROR 1406 (22001): Data too long for column 'content' at row 1

n'a pas spécifié le jeu de caractères comme gbk, et une erreur s'est produite lors de l'insertion

mysql> set names 'gbk';
Query OK, 0 rows affected (0.02 sec)

Spécifié le jeu de caractères comme gbk

mysql> insert into mysqlcode values(null,'php爱好者');
Query OK, 1 row affected (0.00 sec)

Insérer avec succès

mysql> select * from mysqlcode;
+----+-----------+
| id | content   |
+----+-----------+
| 1  | php爱好着 |
+----+-----------+
1 row in set (0.00 sec)

des caractères tronqués apparaîtront lors de la lecture sans spécifier le jeu de caractères gbk, comme suit

mysql> select * from mysqlcode;
+----+---------+
| id | content |
+----+---------+
| 1  | php???  |
+----+---------+
1 row in set (0.00 sec)

[Créez une base de données dans phpmyadmin et spécifiez le jeu de caractères]

Le type de table est basé sur Vous devez choisir, choisissez ici MyISAM (prend en charge la recherche en texte intégral)

organisez et sélectionnez gbk_chinese_ci, qui est le jeu de caractères gbk

gbk_bin simplifié Chinois, binaire. gbk_chinese_ci Chinois simplifié, insensible à la casse.

Insérez la base de données dans la base de données que vous venez de créer

Lorsque vous la parcourez à nouveau, vous constatez que le code est tronqué

Pourquoi ? C'est parce que la base de données est un jeu de caractères gbk, et nous ne l'avons pas spécifié comme gbk

Lorsque nous opérons, revenez à la page d'accueil de la base de données

et vous pouvez voir le latin1_bin par défaut pour Relecture de connexion mysql. Nous le changeons en gbk_chinese_ci

et insérons une donnée. Écoutez, c'est normal

[Solution pour la lecture du code tronqué de la base de données php]

Toujours en prenant la base de données mysqlcode comme exemple

<?php 
$conn = mysql_connect("localhost","root","89973645"); 
mysql_query("set names &#39;gbk&#39;");//这就是指定数据库字符集,一般放在连接数据库后面就系了 
mysql_select_db("test"); 
 
$sql = "select * from mysqlcode"; 
$result = mysql_query($sql,$conn); 
 
?> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>mysql 字符编码</title> 
</head> 
 
<body> 
<table width="300" height="32" border="1" align="center" cellpadding="0" cellspacing="0"> 
 <tr> 
    <td width="71" align="center">id</td> 
    <td width="229" align="center">内容</td> 
 </tr> 
 <?php while($row = mysql_fetch_assoc($result)){ 
 echo "   
 <tr> 
    <td align=/"center/">".$row[&#39;id&#39;]."</td> 
    <td>".$row[&#39;content&#39;]."</td> 
 </tr>"; 
}?>   
</table> 
</body> 
</html> 
<?php mysql_free_result($result);?>

Si nous utilisons mysql_query("set names ' gbk '"); Commentez-le, il sera définitivement tronqué

Ajoutez cette phrase et ce sera à nouveau normal

Une phrase

Quel encodage votre base de données utilise-t-elle ? Paramétrez-le avant d'opérer sur les noms de bases de données 'votre encodage';

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