PHP에서 MySQL 데이터베이스를 사용할 때는 종종 MySQLI_Result 함수에 의해 리턴 된 쿼리 결과에서 차량 코드 문제가 발생합니다. 일반적으로, 차량 문제는 캐릭터 인코딩이 올바르게 설정되지 않아서 발생합니다. 이 기사는 UNSET 캐릭터 인코딩이 왜 쿼리 결과를 유발하고 솔루션을 제공하는지 설명합니다.
캐릭터 인코딩은 캐릭터가 컴퓨터에 저장되고 표현되는 방식입니다. 각 언어의 문자 세트는 올바르게 표시되도록 명확하게 인코딩되어야합니다. 예를 들어, UTF-8 인코딩은 다양한 언어로 문자를 지원할 수있는 널리 사용되는 문자 세트입니다. 문자 인코딩이 일치하지 않으면 시스템이 텍스트를 올바르게 식별하고 표시 할 수 없으므로 코드가 나옵니다.
MySQL 데이터베이스에서 각 데이터베이스, 테이블, 필드 및 연결에는 자체 문자 인코딩이있을 수 있습니다. 데이터베이스 연결의 문자 인코딩이 데이터베이스 또는 테이블의 문자 인코딩과 일치하지 않으면 문제가 발생할 수 있습니다.
mysqli_result 함수를 사용하여 쿼리 결과를 얻을 때 MySQL의 기본 문자 세트는 우리가 기대하는 문자 세트가 아닐 수 있습니다. 특히, 데이터베이스 및 테이블의 문자 세트가 올바르게 설정되지 않거나 데이터베이스 연결의 문자 세트가 올바르게 설정되지 않으면 차량 코드가 발생하기 쉽습니다.
mysqli_result 는 MySQL 쿼리의 결과를 얻는 PHP의 함수입니다. mysqli_query를 사용하여 SQL 쿼리를 실행하면 mysqli_result 객체를 반환합니다. 그런 다음 개체의 fetch_assoc () , fetch_row () 및 기타 메소드를 사용하여 쿼리 결과를 얻을 수 있습니다.
예를 들어:
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
$result = mysqli_query($conn, "SELECT * FROM users");
while($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
위 코드에서 쿼리 결과의 필드 이름 에 중국어가 포함된다고 가정하면 문자 인코딩이 올바르게 설정되지 않으면 쿼리 결과의 한자가 차단 될 수 있습니다.
기본적으로 MySQL 연결의 문자 세트는 MySQL 서버의 구성에 의해 결정됩니다. MySQL 서버의 문자 세트가 처리하려는 데이터 인코딩과 일치하지 않으면 쿼리 결과의 문자가 잘못 해독되어 코드가 나올 수 있습니다.
예를 들어, 중국어가 MySQL 데이터베이스에 저장되고 테이블의 문자 세트가 UTF-8이라고 가정합니다. 그러나 PHP 스크립트가 데이터베이스에 연결할 때 LATIN1 (즉, ISO-8859-1) 문자를 사용하는 경우 데이터베이스에서 반환 한 데이터는 UTF-8이 아닌 LATIN1 인코딩에서 디코딩됩니다. 두 인코딩이 다르기 때문에 반환 된 중국어가 멍청하게 나타납니다.
문자 인코딩 문제를 해결하려면 데이터베이스 연결이 연결될 때 올바른 문자 인코딩이 설정되어 있는지 확인해야합니다. 문자 인코딩은 다음과 같은 방식으로 설정할 수 있습니다.
데이터베이스 연결을 설정 한 후 MySQLI_SET_CHARET () 함수를 사용하여 문자 인코딩을 설정하십시오.
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
mysqli_set_charset($conn, 'utf8'); // 캐릭터 인코딩을 설정하십시오UTF-8
이렇게하면 데이터베이스 연결이 UTF-8 문자를 사용하여 인코딩되어 문제를 피할 수 있습니다.
또한 데이터베이스 및 테이블의 문자 인코딩도 UTF-8로 설정되어 있는지 확인해야합니다. 데이터베이스 및 테이블의 문자 세트는 다음 SQL 문으로 점검하고 수정할 수 있습니다.
데이터베이스 문자 세트보기 :
SHOW CREATE DATABASE database_name;
데이터베이스 문자 세트 수정 :
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
테이블의 문자 세트를보십시오.
SHOW TABLE STATUS FROM database_name;
테이블의 문자 세트를 수정하십시오.
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
경우에 따라 다음 SQL 문을 실행하여 클라이언트 문자를 설정해야 할 수도 있습니다.
SET NAMES 'utf8';
이렇게하면 쿼리가 실행될 때 클라이언트와 MySQL 서버 간의 문자 인코딩이 일관되게됩니다.
BREBLED 문제는 일반적으로 MySQLI_Result 함수를 사용하여 쿼리 결과를 얻을 때 일치하지 않는 문자 인코딩 설정으로 인해 발생합니다. 문자 인코딩이 올바르게 설정되지 않으면 MySQL은 기본 문자 세트 (일반적으로 LATIN1)를 사용하여 쿼리 결과가 나옵니다. 이 문제를 피하려면 다음을 확인해야합니다.
데이터베이스에 연결할 때 올바른 문자 인코딩 (예 : UTF-8)을 설정하십시오.
데이터베이스, 테이블 및 클라이언트의 문자 세트가 일관성이 있는지 확인하십시오.
여전히 문제가 발생하면 문자 인코딩의 일관성을 보장하기 위해 이름 설정 'UTF8' 을 설정하려고합니다.
이러한 방법을 통해 쿼리 결과를 효과적으로 피하고 데이터를 올바르게 표시하도록 검색 된 코드를 보장 할 수 있습니다.