PHP의 MySQLI Extension을 사용하여 데이터베이스에 연결할 때 데이터의 올바른 읽기 및 쓰기를 보장하기 위해 연결된 문자 세트를 설정해야합니다. 일반적으로 $ mysqli-> set_charset ( 'utf8')을 사용하여 문자 세트를 설정합니다. 그러나 때로는 set_charset을 호출 한 후 오류가 발생하여 프로그램이 정상적으로 실행되지 않습니다. 그렇다면 정확히 무엇이 문제입니까? 이 기사는 일반적인 시나리오와 함께 mysqli :: set_charset을 설정하는 오류의 이유를 분석하고 문제 해결 아이디어를 제공합니다.
$ mysqli-> set_charset ( 'utf8')을 호출 할 때 오류가 발생했으며 일반적인 프롬프트는 다음과 같습니다.
경고 : mysqli :: set_charset () : 오류
숯을 설정하지 못했습니다
쓰레기 문자 또는 데이터 삽입 예외
이러한 오류의 대부분은 문자 세트 설정의 불일치와 관련이 있습니다.
데이터베이스 쪽의 문자 세트 설정은 통합되지 않았습니다.
데이터베이스 또는 데이터 테이블의 문자 세트는 연결 설정의 문자 세트와 일치하지 않습니다.
예를 들어, 데이터베이스의 기본 문자 세트는 LATIN1 이고 프로그램은 UTF8 로 설정됩니다. 둘 사이의 불일치로 인해 오류가 발생할 수 있습니다.
MySQL 버전 또는 드라이버 제한
이전 버전의 MySQL은 특정 문자 세트에 대한 지원이 제한되어 있습니다.
문자 세트를 설정할 때 지정된 문자 세트가 존재하지 않거나 지원되지 않으면 오류 가보고됩니다.
문자 세트 이름 오류
set_charset 에 전달 된 문자 세트 이름은 MySQL에서 지원하는 이름과 엄격하게 일치해야합니다.
예를 들어 UTF-8을 사용하면 오류가 발생하면 올바른 것이 UTF8 입니다.
연결이 성공하지 못했거나 닫혔습니다
$ mysqli 객체가 데이터베이스에 성공적으로 연결되지 않으면 set_charset을 호출하는 것도 실패합니다.
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
문자 세트를 계속 설정하기 전에 연결에 예외가 없는지 확인하십시오.
다음 SQL을 사용하여 쿼리 MySQL 지원 문자 세트 :
$result = $mysqli->query("SHOW CHARACTER SET");
while ($row = $result->fetch_assoc()) {
echo $row['Charset'] . "\n";
}
UTF8 과 같이 설정하려는 문자 세트가 존재하는지 확인하십시오.
문자 세트를 설정할 때는 사례 민감도 및 이름 사양에주의하십시오.
if (!$mysqli->set_charset('utf8')) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
echo "Current character set: " . $mysqli->character_set_name();
}
UTF-8과 같은 문자열을 사용하지 마십시오.
MySQL에 로그인 한 후 데이터베이스 및 테이블의 문자 세트를 확인하십시오.
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
일관성이없는 경우 충돌을 피하기 위해 데이터베이스 또는 테이블의 문자 세트를 수정하는 것이 좋습니다.
때로는 set_charset을 호출하지 않도록 연결할 때 문자 세트를 직접 지정할 수 있습니다.
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
$mysqli->query("SET NAMES 'utf8'");
그러나 Set_Charset을 먼저 사용하는 것이 좋습니다. 세트 이름 보다 안전하기 때문입니다.
mysqli :: set_charset 설정 오류는 주로 호환되지 않는 문자 세트 또는 잘못된 이름으로 인해 오류입니다. 문제 해결시 : 확인하십시오.
데이터베이스 연결이 성공적입니다
사용 된 문자 세트는 정확하고 지원됩니다
데이터베이스 및 테이블의 문자 세트는 연결된 문자 세트와 일치합니다.
위의 단계를 하나씩 확인하면 문자 세트를 설정하는 데 오류 문제가 해결되어 PHP와 MySQL 간의 데이터 전송을 인코딩하는 것이 올바른지 확인할 수 있습니다.