ホームページ  >  記事  >  バックエンド開発  >  PHPのデータベースクエリで文字化けが発生する問題を解決する方法

PHPのデータベースクエリで文字化けが発生する問題を解決する方法

藏色散人
藏色散人オリジナル
2020-07-24 09:57:153195ブラウズ

php データベース クエリの文字化けの解決策: まず、MySQL コマンド ライン クライアントでデータベースを作成し、次に、mysql が複数のエンコード データベースを同時にサポートできるようにデータベースの文字セットを指定し、最後に作成したデータベースを操作します。 。

PHPのデータベースクエリで文字化けが発生する問題を解決する方法

文字化けの解決策

推奨: "PHP チュートリアル "

コードの文字化けの問題を解決するには、まずデータベースで使用されているエンコーディングを把握する必要があります。指定しない場合、デフォルトは latin1 です。

最もよく使用する 3 つの文字セットは、gb2312、gbk、および utf8 です。

では、データベースの文字セットを指定するにはどうすればよいでしょうか?以下も gbk

[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)

の例です。次の TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

は、指定したデータベースの文字を設定し、COLLATE (照合順序) を実行すると、mysql が複数のエンコード データベースを同時にサポートできるようになります。

もちろん、次の手順でデータベースの文字セットを変更することもできます。

alter database da_name default character set 'charset'.

クライアントはそれを gbk 形式で送信し、次の構成を使用できます。

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

この設定は、SET NAMES 'gbk' と同等です。

今作成したデータベースを操作してください

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

文字セットが gbk として指定されていないため、挿入中にエラーが発生しました

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

指定された文字セットは gbk です

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

挿入成功

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

文字セットgbkを指定せずに読み込むと以下のように文字化けも発生します

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

[phpmyadminでデータベースを作成し文字セットを指定]

テーブル タイプは、選択する必要があります。ここでは MyISAM (全文​​検索をサポート) を選択します。

gbk 文字セットである gbk_chinese_ci を整理して選択します。

gbk_bin 簡体字中国語、バイナリ。 gbk_chinese_ci 簡体字中国語、大文字と小文字は区別されません。

作成したばかりのデータベースにデータベースを挿入します

もう一度参照すると、コードが文字化けしていることがわかります

なぜですか?これは、データベースが gbk 文字セットであり、操作中にそれを gbk として指定しなかったためです。

データベースのホームページに戻る

mysql 接続校正用のデフォルトの latin1_bin を確認できます。これを gbk_chinese_ci

に変更し、データを挿入します。ほら、これは正常です

[データベースの文字化けコードを読み取るphpの解決策]

データベースmysqlcodeを例として取り上げます

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

mysql_query("set names ' gbk '"); コメントアウトしてください、確実な場合は文字化けします

その文を追加すると正常に戻ります

一文

あなたのエンコーディングは何ですかデータベースを使用しますか? データベース名「エンコーディング」を操作する前に設定してください;

以上がPHPのデータベースクエリで文字化けが発生する問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。