MySQL 데이터베이스를 쿼리할 때 PHP는 중국어 왜곡 문자를 어떻게 해결합니까?
1. MySQL 데이터베이스의 기본 인코딩은
2. PHP에서 데이터를 쿼리하기 전에 문자 집합을 UTF-8로 설정하세요. UTF-8로 설정하세요.
최근 BBT로부터 투표 시스템 구축 교육을 받았습니다. 시스템 코드는 어렵지 않지만 주로 문자셋과 인코딩을 공부하는데 시간을 보냈습니다. MySQL과 Apache 시스템의 인코딩(문자 집합) 문제로 인해 머리가 아프고 많은 고통을 겪었습니다. 인터넷상의 이러한 문제에 대한 해결책은 흩어져 있고 일방적입니다. 대부분은 이유를 설명하지 않고 해결책을 제공합니다. 그래서 나는 지각자들이 다시 우회하는 것을 피하기 위해 지난 며칠 동안 내가 얻은 것을 요약할 것이다. 이 기사는 PHP를 작성하는 데 약간의 도움이 됩니다(읽고 나면 PHP 프로그램을 대부분의 공간 공급자의 서버에 정상적으로 표시하는 방법을 알게 될 것입니다). 그러나 더 많은 도움은 네트워크 서버의 설정 및 설정에 있습니다.
먼저 MySQL의 문자 집합에 대해 이야기해 보겠습니다. Windows에서는 my.ini의 두 필드
# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
를 수정하여 데이터베이스의 기본 문자 집합을 변경할 수 있습니다. 첫 번째는 클라이언트의 기본 문자 집합이고, 두 번째는 서버의 기본 문자 집합입니다. 둘 다 utf8로 설정하고 MySQL 명령줄 클라이언트에 "show variables like "character_set_%";"를 입력한다고 가정해 보겠습니다.
character_set_client latin1 character_set_connection latin1 character_set_database utf8 character_set_results latin1 character_set_server utf8 character_set_system utf8
utf8은 위의 설정에 따라 변경됩니다. 이때 UTF-8을 사용하는 PHP 프로그램을 통해 데이터베이스에서 데이터를 읽으면 "?????" 문자열이나 기타 잘못된 문자일 가능성이 높습니다. 오랫동안 온라인으로 검색한 후 해결 방법은 간단합니다. 데이터베이스에 연결한 후 데이터를 읽기 전에 먼저 PHP에서
mysql_query("SET NAMES UTF8");
인 "SET NAMES UTF8" 쿼리를 실행하면 정상적으로 표시됩니다(예: 데이터베이스의 정보 문자가 정상인 경우). 왜 이런 일이 발생합니까? "SET NAMES UTF8" 쿼리의 기능은 정확히 무엇인가요?
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_results = utf8; SET character_set_connection = utf8;
이 세 가지 변수의 기능을 살펴보세요.
정보 입력 경로: 클라이언트→연결→서버;
정보 출력 경로: 서버→연결→결과.
즉, 각 경로마다 문자 집합 인코딩을 3번 변경해야 합니다. 잘못된 출력을 예로 들어 보겠습니다. 서버의 utf8 데이터의 경우 들어오는 연결은 latin1로 변환되고 들어오는 결과는 latin1로 변환되며 utf-8 페이지는 결과를 다시 변환합니다. latin1 및 utf8과 같이 두 문자 집합이 호환되지 않는 경우 변환 프로세스는 되돌릴 수 없으며 파괴적입니다. 그러므로 되돌릴 수 없습니다.
그러나 여기서는 "SET NAMES UTF8"의 효과는 일시적일 뿐이며 MySQL은 다시 시작한 후 기본값으로 돌아간다는 점을 명시해야 합니다.
다음 단계는 서버에서의 MySQL 구성에 대해 이야기하는 것입니다. 데이터 전송 인코딩의 일관성을 보장하기 위해 데이터베이스를 읽고 쓸 때마다 "SET NAMES UTF8"을 추가해야 하지 않나요? 이 세 가지 변수가 우리가 원하는 문자 집합으로 기본 설정되도록 MySQL을 구성할 수 있습니까? 설명서에는 나와 있지 않으며 온라인에서 답변을 찾을 수 없습니다. 따라서 서버 구성 관점에서 해당 코드 줄을 생략할 수 있는 방법은 없습니다.
추천 튜토리얼: "
PHP" "MySQL Tutorial"
위 내용은 MySQL 데이터베이스를 쿼리할 때 PHP는 중국어 왜곡 문자를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!