현재 위치: > 최신 기사 목록> mysqli :: get_charset을 사용할 때 문자 세트가 latin1로 나타납니다. 문제는 무엇입니까?

mysqli :: get_charset을 사용할 때 문자 세트가 latin1로 나타납니다. 문제는 무엇입니까?

M66 2025-05-18

PHP에서는 데이터베이스 연결, 특히 데이터베이스에 저장된 데이터에 ASCII가 아닌 문자가 포함되어있을 때 문자 세트를 처리해야합니다. 문자 세트가 올바르게 설정되어 있는지 확인해야합니다. mysqli :: get_charset 함수는 현재 데이터베이스 연결에서 사용하는 문자 세트 (chars)를 얻는 데 사용됩니다. 그러나 일부 개발자는 데이터베이스에 연결할 때 다른 문자 세트 (예 : UTF-8)를 설정 하더라도이 기능을 사용할 때 리턴 된 문자 세트가 항상 LATIN1임을 알게됩니다. 그렇다면 왜 이런 일이 발생합니까? 정확히 무엇이 잘못 되었습니까?

1. mysqli :: get_charset 함수를 이해하십시오

먼저, mysqli :: get_charset 함수의 기능은 현재 데이터베이스 연결과 관련된 문자 세트 정보를 반환하는 것입니다. 이 문자 세트는 데이터베이스 자체의 기본 문자 세트가 아니라 데이터베이스가 연결할 때 사용되는 문자 세트입니다. 기본 구문은 다음과 같습니다.

 $charset = $mysqli->get_charset();

여기서 $ charset에는 현재 연결된 문자 세트 정보가 포함됩니다.

2. 왜 문자 세트가 latin1 로 나타나나요?

mysqli :: get_charset 에 의해 반환 된 문자 세트가 Latin1 이라는 것을 알게되면 일반적으로 다음과 같은 이유가 있습니다.

2.1 데이터베이스 연결시 문자 세트가 올바르게 설정되지 않습니다

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 인코딩을 사용하도록 지시하여 후속 작업에서 유니 코드 문자를 올바르게 처리 할 수 ​​있도록합니다.

2.2 데이터베이스 자체의 기본 문자 세트

문자 세트가 PHP 코드로 설정 되더라도 데이터베이스 자체의 기본 문자 세트가 Latin1 로 설정되면 데이터베이스 연결이 설정 될 때 반환 된 문자 세트에 영향을 줄 수 있습니다. 데이터베이스 구성을 확인하여 데이터베이스의 기본 문자 세트가 올바른지 확인하십시오 (예 : UTF-8). 다음 SQL 쿼리를 통해 데이터베이스의 기본 문자 세트를 볼 수 있습니다.

 SHOW VARIABLES LIKE 'character_set_database';

2.3 문자 세트는 데이터 테이블 또는 열의 문자 세트 설정과 일치하지 않습니다.

데이터베이스 자체의 문자 세트 외에도 데이터 테이블 및 열의 문자 세트는 문자 세트의 표시에도 영향을 줄 수 있습니다. 문자 인코딩 문제가 테이블 또는 열의 문자 세트가 연결 될 때 문자 세트 세트와 일치하지 않으면 발생할 수 있습니다. 테이블 및 열의 문자 세트는 다음 SQL 쿼리를 통해 볼 수 있습니다.

 SHOW TABLE STATUS WHERE name = 'your_table_name';

또는 특정 열에 대한 문자 세트를보십시오.

 SHOW FULL COLUMNS FROM your_table_name;

3.이 문제를 해결하는 방법은 무엇입니까?

이 문제를 해결하는 핵심은 데이터베이스 연결이 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

4. 요약

mysqli :: get_charset을 사용하면 반환 된 문자 세트는 현재 데이터베이스 연결에 사용되는 문자 세트입니다. 문자 세트가 Latin1 로 표시되면 연결 중에 문자 세트가 올바르게 설정되지 않았거나 데이터베이스, 데이터 테이블 및 열의 문자 세트 설정이 일치하지 않을 수 있습니다. 데이터베이스에 연결할 때 올바른 문자 세트를 설정하고 데이터베이스 및 테이블의 문자 세트 구성을 확인 하여이 문제를 해결하는 데 도움이됩니다.