PHP가 mysql 데이터베이스를 읽을 때 문자가 깨졌을 때 해결 방법에 대해
PHP가 mysql을 읽을 때 다음 위치에 문자 집합이 포함됩니다.
1.데이터베이스 테이블 생성 시 데이터베이스 테이블의 문자셋을 지정합니다. 예를 들어
create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )DEFAULT CHARSET =UTF8;
2. mysql의 문자 집합
mysql에는 세 가지 중요한 변수, Character_set_client, Character_set_results 및 Character_set_connection이 있습니다.
character_set_client를 설정하여 PHP가 데이터베이스에 저장하는 인코딩 방법을 MySQL에 알려줍니다.
character_set_results를 설정하여 PHP가 어떤 종류의 인코딩된 데이터를 얻어야 하는지 MySQL에 알려주세요.
character_set_connection을 설정하여 PHP 쿼리의 텍스트에 사용할 인코딩을 MySQL에 알려주세요.
3. 데이터베이스에 연결한 후 데이터베이스 간 문자 전송 시 사용되는 기본 문자 인코딩을 설정합니다.
mysqli::set_charset() 또는 mysqli::query('set names utf8')을 사용하여 설정하세요. "set names"대신 mysqli :: set_charset (mysqli : set_charset)을 사용하는 것입니다. 여기에 문제가 있습니다. 즉, 데이터베이스와 PHP가 인코딩을 통합했지만 mysqli::set_charset() 함수가 호출되지 않으면 데이터를 읽을 때 여전히 잘못된 문자가 나타납니다. 왜 그럴까요? , set names utf8은 다음 세 문장과 같습니다.
$db = new mysqli('localhost','user','passwd','database_name'); $db->set_charset('utf8');
<meta http-equiv="content-type" content="text/html; charset=utf-8">
复制代码
5. php文本文件所使用的字符集。
在linux下可以用vim打开文件,输入
:set encoding
查看文件使用的字符集
要保证不乱码,需要保证文件自身的编码,HTML里指定的编码,PHP告诉Mysql的编码(包括character_set_client和character_set_results)统一。同时使用mysqli:set_charset()函数或”SET NAMES”。
针对“3”后面的问题,写了几个例子,测试链接数据库后,设置和不设置字符集时的结果。测试环境Ubuntu 12.04,MySQL 5.5,php 5.5.7。
结果如下:
(1) 数据库表字符集是utf8,不使用set names utf8
能正常插入、读出中文,但是在mysql中显示乱码
(2) 数据库表字符集是utf8,使用set names utf8
能正常插入、读出中文,mysql中显示正确
(3) 数据库表字符集不是utf8,使用set names utf8
mysql中显示,读出都是问号。
위 내용은 PHP가 mysql 데이터베이스를 읽을 때 문자가 깨지는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!