Heim >Backend-Entwicklung >PHP-Problem >So lösen Sie das Problem verstümmelter Zeichen in PHP-Datenbankabfragen
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.
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 '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);?>
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!