PHP 데이터베이스 쿼리에서 잘못된 문자에 대한 해결 방법: 먼저 MySQL 명령줄 클라이언트에서 데이터베이스를 생성한 다음 mysql이 동시에 여러 인코딩 데이터베이스를 지원하도록 데이터베이스의 문자 집합을 지정하고 마지막으로 생성된 데이터베이스를 작동합니다.
잘못된 코드에 대한 솔루션
권장: "PHP Tutorial"
잘못된 코드 문제를 해결하려면 먼저 데이터베이스에서 어떤 인코딩을 사용하는지 파악해야 합니다. 지정하지 않으면 기본값은 latin1입니다.
우리가 가장 많이 사용하는 세 가지 문자 세트는 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(collation), 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 '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);?>
mysql_query("set names 'gbk'");를 주석 처리하면 확실히 그럴 것입니다. 깨져요
그 문장을 추가하면 다시 정상이 됩니다
한 문장으로
데이터베이스에 어떤 인코딩을 사용하시나요? 데이터베이스를 운영하기 전에 이름을 '자신의 인코딩'으로 설정하세요.
위 내용은 PHP 데이터베이스 쿼리에서 잘못된 문자 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!