php는 잘못된 코드 문제에 대한 mysql의 요약을 읽습니다. 도움이 필요한 친구는 이를 참조할 수 있습니다.
PHP가 mysql을 읽을 때 다음 위치에 문자 집합이 포함됩니다.
1. 데이터베이스 테이블 생성 시 데이터베이스 테이블의 문자셋을 지정합니다. 예를 들어
- create table tablename
- (
- id int not null auto_increment,
- title varchar(20) null이 아님,
- 기본 키('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)을 사용해 보세요. PS: (이 문서 참조 기사)
- $db = new mysqli('localhost','user','passwd','database_name');
- $db->set_charset('utf8');
코드 복사
utf-8이 아니라 utf8이라는 점에 유의하세요
(여기서 문제는 데이터베이스와 PHP가 인코딩을 통일했다는 점인데, mysqli::set_charset() 함수가 호출되지 않으면 데이터를 읽을 때 여전히 문자가 깨져서 나타납니다. 이유는 무엇인가요?)
(또한 set names utf8은 다음 세 문장과 동일합니다
SET Character_set_client = utf8;
SET Character_set_results = utf8
SET Character_set_connection = utf8
)
4. html 페이지에서 사용하는 문자 집합입니다. 메타 태그에 5. PHP 텍스트 파일에서 사용되는 문자 집합입니다.
Linux에서는 vim을 사용하여 파일을 열고 를 입력할 수 있습니다.
:인코딩 설정
파일에서 사용하는 문자 집합을 확인하세요
왜곡된 코드가 없는지 확인하려면 파일 자체의 인코딩, 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입니다. 세트 이름 utf8을 사용하지 마십시오
중국어는 정상적으로 삽입하고 읽을 수 있는데, mysql에서는 잘못된 문자가 표시됩니다
(2) 데이터베이스 테이블 문자 집합은 utf8입니다. 집합 이름은 utf8을 사용하세요
중국어를 정상적으로 삽입하고 읽을 수 있으며, mysql에서는 올바르게 표시됩니다
(3) 데이터베이스 테이블 문자 집합이 utf8이 아닙니다. utf8 집합 이름을 사용하세요
이는 mysql에 표시되고 물음표로 읽혀집니다.
참고:
[1] 심층적인 MySQL 문자 집합 설정 http://www.laruence.com/2008/01/05/12.html
[2] PHP 및 MYSQL의 인코딩 문제 http://blog.csdn.net/martinkro/article/details/5352474
[3] SET NAMES와 mysql(i)_set_charset의 차이점에 대한 심층적인 이해.http://www.laruence.com/2010/04/12/1396.html
[4] MySQL의 "SET NAMES xxx" 문자 집합 문제 분석 http://bbs.phpchina.com/thread-13861-1-1.html
|