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
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.
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 'gbk'");//这就是指定数据库字符集,一般放在连接数据库后面就系了 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['id']."</td> <td>".$row['content']."</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!