>백엔드 개발 >PHP 튜토리얼 >PHP는 mysql 왜곡된 코드를 읽고 이를 해결하는 원리를 세트 이름 XXX로 공유합니다.

PHP는 mysql 왜곡된 코드를 읽고 이를 해결하는 원리를 세트 이름 XXX로 공유합니다.

WBOY
WBOY원래의
2016-07-29 08:47:301178검색

먼저 MySQL의 문자 집합에 대해 이야기해 보겠습니다. Windows에서는 my.ini의
PHP 코드

를 수정하여 코드를 복사할 수 있습니다.


[mysql]
default-character-set=utf8 //클라이언트의 기본 문자 집합
[mysqld]
default-character-set=utf8 //서버의 기본 문자 집합


둘 다 utf8로 설정하고 MySQL 명령줄 클라이언트에 "show variables like "character_set_%";"를 입력하면 다음 문자를 볼 수 있습니다.

복사 코드 코드는 다음과 같습니다. Character_set_system utf8

UTF-8을 사용하는 PHP 프로그램을 통해 데이터베이스에서 데이터를 읽는 경우 "?????" 문자열 또는 기타 잘못된 문자일 가능성이 높습니다.

해결책은 데이터베이스에 연결한 후 데이터를 읽기 전에 "SET NAMES UTF8" 쿼리를 실행하는 것입니다. PHP에서는
mysql_query("SET NAMES UTF8")// 이 문장은 다음과 같습니다. 데이터베이스 서버 연결문 [$c die("Connection to server failed");] 뒤에
배치하면 정상적으로 표시됩니다(데이터베이스에 있는 정보의 문자가 정상인 경우에 한함).
MySQL 명령줄에 "SET NAMES UTF8;"을 입력한 다음 "show variables like "character_set_%";"를 실행하여 "character_set_client", "character_set_connection" 및 "character_set_results" 변수의 값을 찾습니다. " 원래 latin1이었던 것이 모두 바뀌었습니다. utf8입니다. 이 세 가지 변수가 문제를 일으키는 것으로 나타났습니다.
매뉴얼을 확인하면 위의 문장은 다음과 같습니다.
SET Character_set_client = utf8;
SET Character_set_connection = utf8;
정보 입력 경로: 클라이언트→연결→서버

정보 출력 경로: 서버→연결→결과.
즉, 각 경로마다 문자 집합 인코딩을 3번 변경해야 합니다. 잘못된 출력을 예로 들어 보겠습니다. 서버의 utf8 데이터의 경우 들어오는 연결은 latin1로 변환되고 들어오는 결과는 latin1로 변환되며 utf-8 페이지는 결과를 다시 변환합니다. latin1 및 utf8과 같이 두 문자 집합이 호환되지 않는 경우 변환 프로세스는 되돌릴 수 없으며 파괴적입니다.
그러나 여기서는 "SET NAMES UTF8"의 효과는 일시적일 뿐이며 MySQL은 다시 시작한 후 기본값으로 돌아간다는 점을 명시해야 합니다.
다음 단계는 서버에서의 MySQL 구성에 대해 이야기하는 것입니다. 데이터 전송 인코딩의 일관성을 보장하기 위해 데이터베이스를 읽고 쓸 때마다 "SET NAMESUTF8"을 추가해야 하지 않나요? 이 세 가지 변수가 우리가 원하는 문자 집합으로 기본 설정되도록 MySQL을 구성할 수 있습니까? 설명서에는 나와 있지 않으며 온라인에서 답변을 찾을 수 없습니다. 따라서 서버 구성 관점에서 해당 코드 줄을 생략할 수 있는 방법은 없습니다.
요약: 더 많은 서버에서 웹페이지가 정상적으로 표시되도록 하려면 "SET NAMES UTF8"을 추가하는 것이 좋습니다. 지금 이 문장을 추가하지 않아도 정상적으로 접속이 가능합니다.
위 내용은 PHP가 mysql 왜곡된 코드를 읽는 문제를 해결하기 위해 세트 이름 XXX를 사용하는 원리를 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.