데이터베이스 연결에 MySQLI 확장 기능을 사용하는 경우 MySQLI :: SET_CHARET 메소드는 종종 문자 세트를 설정하는 데 사용됩니다. 이론적으로 문자 세트가 올바르게 설정되면 지정된 문자 세트에 따라 모든 데이터 전송 및 쿼리를 인코딩 할 수 있어야합니다. 그러나 실제로 사용하면 mysqli :: set_charset 설정이 효과가없는 상황을 종종 만나서 문자 세트의 데이터 또는 불일치가 발생합니다.
이 기사에서는 MySQLI :: SET_CHARET 설정이 유효하지 않은 이유, 일반적인 오류 및 문제 해결 기술이 문제를 신속하게 해결하는 데 도움이되는 이유를 자세히 설명합니다.
문자 세트를 설정할 때 데이터베이스 연결이 성공한 후에 MySQLI :: SET_CHARSET을 호출해야하지만 일부 특별한 경우 메소드를 호출하면 적용되지 않을 수 있습니다. 일반적인 이유는 다음과 같습니다.
문자 세트는 연결 후 시간에 설정되지 않습니다
데이터베이스 연결이 성공한 후에 mysqli :: set_charset을 호출해야하며 연결 전에 호출되면 문자 세트가 올바르게 설정되지 않습니다.
문자 세트 설정은 연결 전에 덮어 쓰기 <br>입니다 데이터베이스 연결 중에 문자 세트가 설정된 경우 (예 : 연결 문자열의 Charset 매개 변수를 통한) MySQLI :: SET_CHARSET은 무시되거나 영향을 미치지 않을 수 있습니다.
문자 세트는 데이터베이스 <br>과 호환되지 않습니다 설정 한 문자 세트가 데이터베이스의 기본 문자 세트와 호환되지 않으면 문자 세트 설정이 유효하지 않을 수 있습니다. 데이터베이스의 문자 세트 설정을 확인하여 일관성이 있는지 확인할 수 있습니다.
다음 코드를 실행한다고 가정합니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->set_charset("utf8mb4");
그러나 설정 후에도 garbled 코드가 여전히 나타납니다. 가능한 이유는 다음과 같습니다.
데이터베이스는이 문자 세트 <br>을 지원하지 않습니다 데이터베이스가 설정 한 문자 세트를 지원하는지 확인하십시오. 예를 들어 UTF8MB4 는 MySQL 버전 5.5+에서만 지원되는 문자 세트입니다. 데이터베이스 버전이 낮은 경우 UTF8MB4 로 설정되지 않을 수 있습니다.
캐릭터 세트 지원 문제 <br> 데이터베이스에 UTF8MB4 문자 세트가 활성화되지 않은 경우 데이터베이스가 다음 SQL 쿼리로 설정된 문자를 지원하는지 확인할 수 있습니다.
SHOW CHARACTER SET LIKE 'utf8mb4';
결과가 없으면 데이터베이스가 UTF8MB4 문자 세트를 지원하지 않음을 의미합니다. UTF8을 사용하거나 데이터베이스를 업그레이드하도록 선택할 수 있습니다.
연결 문자열에있는 문자를 지정한 경우 :
$mysqli = new mysqli("localhost", "username", "password", "database", 3306, NULL);
$mysqli->set_charset("utf8mb4");
경우에 따라, 문자 세트가 연결에서 지정되어 있기 때문에 $ mysqli-> set_charset ( "utf8mb4") 의 설정이 무시 될 수 있습니다. 이 경우 연결 문자열에 이미 Charset 매개 변수가 포함되어 있는지 확인할 수 있습니다.
데이터베이스에 연결하기 전에 문자 세트를 설정하려고하면 SET_CHARSET가 적용되지 않습니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->set_charset("utf8mb4");
올바른 호출 순서는 먼저 연결을 설정 한 다음 문자 세트를 설정하는 것입니다. 데이터베이스에 연결 한 후 즉시 Set_charset이 호출되는지 확인하십시오.
먼저 데이터베이스 및 테이블의 문자 세트가 세트 문자 세트와 일치하는지 확인하십시오. 다음 SQL 쿼리를 통해 현재 데이터베이스의 문자 세트 설정을 볼 수 있습니다.
SHOW CREATE DATABASE `database_name`;
문자 세트 설정이 일치하지 않는 경우 다음 명령을 통해 데이터베이스의 문자 세트를 수정할 수 있습니다.
ALTER DATABASE `database_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
때로는 PHP 구성이 문자 세트의 설정에 영향을 줄 수 있습니다. php.ini 파일의 default_charset이 원하는 문자 세트로 설정되어 있는지 확인하십시오.
default_charset = "UTF-8"
또한 PHP 환경에서 MySQLI 확장을 지원하고 비활성화되지 않은지 확인하십시오.
문제가 여전히 해결되지 않으면 자세한 오류 보고서를 열어 문자 세트 설정에 대한 오류 정보가 있는지 확인할 수 있습니다. 예를 들어:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
오류보고를 켜면 PHP는 문제를 진단하는 데 오류를 실행할 때 예외를 던집니다.
관련 태그:
mysqli