>  기사  >  백엔드 개발  >  PHP 쿼리 왜곡 문제를 해결하는 방법

PHP 쿼리 왜곡 문제를 해결하는 방법

藏色散人
藏色散人원래의
2020-11-19 09:52:551996검색

잘못된 PHP 쿼리에 대한 해결 방법: 먼저 PHP 페이지에 "charset=utf-8"을 추가한 다음 데이터베이스 쿼리 앞에 "mysql_query("set names 'utf8'");"를 추가하세요.

PHP 쿼리 왜곡 문제를 해결하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 5.6 이 방법은 모든 브랜드의 컴퓨터에 적합합니다.

추천: "PHP 비디오 튜토리얼"

PHP를 통해 MySQL에 연결할 때 중국어에서 잘못된 쿼리 결과가 표시되는 문제에 대한 솔루션

먼저 데이터베이스에 사용되는 인코딩이 UTF-8

이라고 가정합니다. 시간이 지나면 먼저 PHP 페이지에서 이 작업을 수행해야 합니다. 다음과 같이

코드를 추가하세요.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

여기의 charset utf-8 값은 파일을 저장할 때의 인코딩 유형과 동일해야 합니다

그런 다음

코드를 추가하세요. 데이터베이스 쿼리 전에 다음과 같이 하세요:

mysql_query("set names &#39;utf8&#39;");

이 명령문 줄의 인코딩 값도 위의 인코딩 값과 동일해야 합니다.

간단히 말하면 웹페이지에 저장된 인코딩 방식과 웹페이지의 charset=utf-8, 실행되는 set names utf8 문의 인코딩 방식이 일관되어야 한다

다음은 좋은 분석이다

MySQL의 "SET NAMES x" 문자 집합 문제 분석

최근 BBT로부터 투표 시스템 구축 교육을 받았습니다. 시스템 코드는 어렵지 않지만 주로 문자셋과 인코딩을 공부하는데 시간을 보냈습니다. MySQL과 Apache 시스템의 인코딩(문자 집합) 문제로 인해 머리가 아프고 많은 고통을 겪었습니다. 인터넷상의 이러한 문제에 대한 해결책은 흩어져 있고 일방적입니다. 대부분은 이유를 설명하지 않고 해결책을 제시합니다. 그래서 나는 지각자들이 다시 우회하는 것을 피하기 위해 지난 며칠 동안 내가 얻은 것을 요약할 것이다. 이 기사는 PHP 작성에 약간의 도움이 되지만(읽고 나면 PHP 프로그램이 대부분의 공간 제공자의 서버에 정상적으로 표시되도록 하는 방법을 알게 될 것입니다), 더 많은 도움은 네트워크 서버의 설정 및 설정에 있습니다.

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

1.# CLIENT SECTION
2.[mysql]
3.default-character-set=utf8
4.# SERVER SECTION
5.[mysqld]
6.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에서

1.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로 변경되었으므로 이 세 가지 변수가 문제를 일으키는 것으로 나타났습니다. 매뉴얼을 확인하면 위 문장은 다음과 같습니다.

1.SET character_set_client = utf8;
2.SET character_set_results = utf8;
3.SET character_set_connection = utf8;

이 세 가지 변수의 기능을 살펴보세요.

정보 입력 경로: 클라이언트→연결→서버;

정보 출력 경로: 서버→연결→결과.

즉, 각 경로마다 문자 집합 인코딩을 3번 변경해야 합니다. 잘못된 출력을 예로 들어 보겠습니다. 서버의 utf8 데이터의 경우 들어오는 연결은 latin1로 변환되고 들어오는 결과는 latin1로 변환되며 utf-8 페이지는 결과를 다시 변환합니다. latin1 및 utf8과 같이 두 문자 집합이 호환되지 않는 경우 변환 프로세스는 되돌릴 수 없으며 파괴적입니다. 그러므로 되돌릴 수 없습니다.

그러나 여기서는 "SET NAMES UTF8"의 효과는 일시적일 뿐이며 MySQL은 다시 시작한 후 기본값으로 돌아간다는 점을 명시해야 합니다.

다음 단계는 서버에서의 MySQL 구성에 대해 이야기하는 것입니다. 데이터 전송 인코딩의 일관성을 보장하기 위해 데이터베이스를 읽고 쓸 때마다 "SET NAMES UTF8"을 추가해야 하지 않나요? 이 세 가지 변수가 우리가 원하는 문자 집합으로 기본 설정되도록 MySQL을 구성할 수 있습니까? 설명서에는 나와 있지 않으며 온라인에서 답변을 찾을 수 없습니다. 따라서 서버 구성 관점에서 해당 코드 줄을 생략할 수 있는 방법은 없습니다.

위 내용은 PHP 쿼리 왜곡 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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