PHP에서는 데이터베이스 연결, 특히 데이터베이스에 저장된 데이터에 ASCII가 아닌 문자가 포함되어있을 때 문자 세트를 처리해야합니다. 문자 세트가 올바르게 설정되어 있는지 확인해야합니다. mysqli :: get_charset 함수는 현재 데이터베이스 연결에서 사용하는 문자 세트 (chars)를 얻는 데 사용됩니다. 그러나 일부 개발자는 데이터베이스에 연결할 때 다른 문자 세트 (예 : UTF-8)를 설정 하더라도이 기능을 사용할 때 리턴 된 문자 세트가 항상 LATIN1임을 알게됩니다. 그렇다면 왜 이런 일이 발생합니까? 정확히 무엇이 잘못 되었습니까?
먼저, mysqli :: get_charset 함수의 기능은 현재 데이터베이스 연결과 관련된 문자 세트 정보를 반환하는 것입니다. 이 문자 세트는 데이터베이스 자체의 기본 문자 세트가 아니라 데이터베이스가 연결할 때 사용되는 문자 세트입니다. 기본 구문은 다음과 같습니다.
$charset = $mysqli->get_charset();
여기서 $ charset에는 현재 연결된 문자 세트 정보가 포함됩니다.
mysqli :: get_charset 에 의해 반환 된 문자 세트가 Latin1 이라는 것을 알게되면 일반적으로 다음과 같은 이유가 있습니다.
MySQLI Extension을 사용하여 데이터베이스 연결을 설정하면 문자 세트를 명시 적으로 지정해야합니다. 데이터베이스에 연결할 때 문자 세트가 설정되지 않거나 설정이 잘못된 경우 MySQLI는 기본적으로 설정된 Latin1 문자를 사용합니다. 데이터베이스 자체의 기본 문자 세트가 UTF-8이더라도 문자 세트가 PHP에서 명시 적으로 설정되지 않은 경우 연결은 여전히 LATIN1을 사용합니다.
문자 세트는 set_charset 메소드를 통해 명시 적으로 설정할 수 있습니다.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 문자를 설정하십시오 UTF-8
$mysqli->set_charset('utf8');
// 현재 문자 세트를 가져옵니다
$charset = $mysqli->get_charset();
echo $charset->charset;
위 코드의 set_charset ( 'UTF8') 은 데이터베이스 연결에 UTF-8 인코딩을 사용하도록 지시하여 후속 작업에서 유니 코드 문자를 올바르게 처리 할 수 있도록합니다.
문자 세트가 PHP 코드로 설정 되더라도 데이터베이스 자체의 기본 문자 세트가 Latin1 로 설정되면 데이터베이스 연결이 설정 될 때 반환 된 문자 세트에 영향을 줄 수 있습니다. 데이터베이스 구성을 확인하여 데이터베이스의 기본 문자 세트가 올바른지 확인하십시오 (예 : UTF-8). 다음 SQL 쿼리를 통해 데이터베이스의 기본 문자 세트를 볼 수 있습니다.
SHOW VARIABLES LIKE 'character_set_database';
데이터베이스 자체의 문자 세트 외에도 데이터 테이블 및 열의 문자 세트는 문자 세트의 표시에도 영향을 줄 수 있습니다. 문자 인코딩 문제가 테이블 또는 열의 문자 세트가 연결 될 때 문자 세트 세트와 일치하지 않으면 발생할 수 있습니다. 테이블 및 열의 문자 세트는 다음 SQL 쿼리를 통해 볼 수 있습니다.
SHOW TABLE STATUS WHERE name = 'your_table_name';
또는 특정 열에 대한 문자 세트를보십시오.
SHOW FULL COLUMNS FROM your_table_name;
이 문제를 해결하는 핵심은 데이터베이스 연결이 PHP 코드에 사용되도록하는 것입니다. 특정 방법은 다음과 같습니다.
문자 세트를 명확하게 설정하십시오. mysqli :: set_charset 메소드를 사용하여 문자를 UTF-8로 설정하십시오.
데이터베이스, 데이터 테이블 및 열의 문자 세트를 확인하십시오. 데이터베이스, 데이터 테이블 및 열의 문자 세트가 UTF-8 (또는 필요한 문자 세트)으로 설정되어 있는지 확인하십시오.
데이터베이스 구성 확인 : 데이터베이스 서버 구성 파일 (예 : my.cnf )에서 기본 문자 세트가 UTF-8로 설정되어 있는지 확인하십시오.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 显式문자를 설정하십시오 UTF-8
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
exit();
}
$charset = $mysqli->get_charset();
echo $charset->charset; // 로 표시해야합니다 utf8
mysqli :: get_charset을 사용하면 반환 된 문자 세트는 현재 데이터베이스 연결에 사용되는 문자 세트입니다. 문자 세트가 Latin1 로 표시되면 연결 중에 문자 세트가 올바르게 설정되지 않았거나 데이터베이스, 데이터 테이블 및 열의 문자 세트 설정이 일치하지 않을 수 있습니다. 데이터베이스에 연결할 때 올바른 문자 세트를 설정하고 데이터베이스 및 테이블의 문자 세트 구성을 확인 하여이 문제를 해결하는 데 도움이됩니다.