Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem verstümmelter Zeichen in PHP-Datenbankabfragen

So lösen Sie das Problem verstümmelter Zeichen in PHP-Datenbankabfragen

藏色散人
藏色散人Original
2020-07-24 09:57:153277Durchsuche

Die Lösung für die verstümmelte Abfrage in der PHP-Datenbank: Erstellen Sie zuerst die Datenbank im MySQL-Befehlszeilenclient und geben Sie dann den Zeichensatz der Datenbank an, damit MySQL schließlich mehrere Codierungsdatenbanken gleichzeitig betreiben kann erstellte Datenbank.

So lösen Sie das Problem verstümmelter Zeichen in PHP-Datenbankabfragen

Lösung für verstümmelten Code

Empfohlen: „PHP-Tutorial

Um das Problem verstümmelter Zeichen zu lösen, müssen Sie zunächst herausfinden, welche Codierung Ihre Datenbank verwendet. Wenn nicht angegeben, ist der Standardwert latin1.

Die drei Zeichensätze, die wir am häufigsten verwenden, sollten gb2312, gbk und utf8 sein.

Wie legen wir also den Zeichensatz der Datenbank fest? Das Folgende ist auch ein Beispiel für gbk

[Datenbank im MySQL-Befehlszeilenclient erstellen]

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)

Der folgende TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

ist der Zeichen, das die Datenbank angibt. Set, COLLATE (Sortierung), damit MySQL mehrere Codierungsdatenbanken gleichzeitig unterstützt.

Natürlich können wir den Zeichensatz der Datenbank auch über den folgenden Befehl ändern:

alter database da_name default character set 'charset'.

Der Client sendet ihn im GBK-Format und die folgende Konfiguration kann verwendet werden:

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

Diese Konfiguration entspricht in SET NAMES 'gbk'.

Betreiben Sie nun die soeben erstellte Datenbank.

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

hat den Zeichensatz nicht als gbk angegeben und beim Einfügen ist ein Fehler aufgetreten.

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

den Zeichensatz haben Sie als gbk angegeben

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

Erfolgreich eingefügt

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

verstümmelte Zeichen werden beim Lesen ohne Angabe des Zeichensatzes gbk wie folgt angezeigt

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

[Erstellen Sie eine Datenbank in phpmyadmin und geben Sie den Zeichensatz an]

Der Tabellentyp basiert auf Sie müssen auswählen, hier wählen Sie MyISAM (unterstützt die Volltextsuche);

organisieren und wählen Sie gbk_chinese_ci, den gbk-Zeichensatz

gbk_bin Simplified Chinesisch, binär. gbk_chinese_ci Vereinfachtes Chinesisch, ohne Berücksichtigung der Groß- und Kleinschreibung.

Fügen Sie die Datenbank in die Datenbank ein, die Sie gerade erstellt haben

Wenn Sie sie erneut durchsuchen, stellen Sie fest, dass der Code verstümmelt ist

Warum? Dies liegt daran, dass es sich bei der Datenbank um einen GBK-Zeichensatz handelt und wir ihn nicht als GBK angegeben haben

Wenn wir arbeiten, kehren Sie zur Datenbank-Homepage zurück

und Sie können den Standardsatz latin1_bin sehen Korrekturlesen der MySQL-Verbindung. Wir ändern es in gbk_chinese_ci

und fügen ein Datenelement ein. Schauen Sie, das ist normal

[Lösung zum Lesen von verstümmeltem Datenbankcode durch PHP]

Ich nehme immer noch den Datenbank-MySQL-Code als Beispiel

<?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);?>

Wenn wir mysql_query("set name ' gbk '"); Kommentieren Sie es aus, es wird definitiv verstümmelt sein

Fügen Sie diesen Satz hinzu und es wird wieder normal sein

Ein Satz

Welche Codierung verwendet Ihre Datenbank? Legen Sie es fest, bevor Sie mit den Datenbanknamen „Ihre Kodierung“ arbeiten;

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem verstümmelter Zeichen in PHP-Datenbankabfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn