현재 위치: > 최신 기사 목록> mysqli :: set_charset과 데이터베이스 기본 문자 세트 간의 관계

mysqli :: set_charset과 데이터베이스 기본 문자 세트 간의 관계

gitbox 2025-05-26

PHP의 MySQLI Extension을 사용하여 데이터베이스에 연결할 때 종종 MySQLI :: SET_CHARET 메소드를 사용하여 캐릭터 세트를 설정하는 개발자가 종종 볼 수 있습니다. 그렇다면 mysqli :: set_charset 에 의해 설정된 문자 세트는 데이터베이스 자체의 기본 문자 세트와 관계가 있습니까? 그들 사이에 갈등이 있습니까? 이 기사는 두 가지와 모범 사례 간의 관계를 자세히 설명합니다.


데이터베이스의 기본 문자 세트는 무엇입니까?

데이터베이스의 기본 문자 세트는 데이터베이스 서버 또는 데이터베이스 인스턴스 (스키마)로 구성된 기본 문자 세트를 나타냅니다. 예를 들어, MySQL 데이터베이스를 작성할 때 기본 문자 세트가 있으며 공통은 UTF8MB4 또는 Latin1 입니다. 테이블이나 필드를 만들 때 문자 세트를 지정하지 않으면 데이터베이스의 기본 문자 세트가 상속됩니다.

SQL 문을 통해 설정된 현재 데이터베이스 기본 문자를 볼 수 있습니다.

 SHOW VARIABLES LIKE 'character_set_database';

서버의 기본 문자 세트를 볼 수도 있습니다.

 SHOW VARIABLES LIKE 'character_set_server';

mysqli :: set_charset 란 무엇입니까?

mysqli :: set_charset은 현재 연결된 문자 세트를 설정하는 데 사용되는 PHP MySQLI 클래스의 메소드입니다. 이 설정은 데이터베이스 서버에 문자 인코딩이 클라이언트가 보낸 데이터를 구문 분석하는 데 사용되는 문자 인코딩 및 쿼리 결과가 반환 될 때 사용되는 인코딩을 알려줍니다.

 $mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->set_charset('utf8mb4');

위의 코드에서 Set_charset ( 'UTF8MB4')은 클라이언트가 보내고 수신 한 데이터가 UTF8MB4 에서 인코딩된다는 것을 MySQL 서버에 알리는 것을 의미합니다.


둘 사이의 관계와 차이

  1. 다른 행동 범위

  • 데이터베이스의 기본 문자 세트는 데이터베이스 수준에 영향을 미치며, 이는 주로 기본적으로 데이터 저장 인코딩을 제어합니다.

  • mysqli :: set_charset은 클라이언트와 데이터베이스 간의 인코딩 형식에 영향을 미칩니다.

  1. 데이터 단계는 다르게 영향을 미칩니다

  • 데이터베이스의 기본 문자 세트는 데이터베이스의 스토리지 데이터 형식을 결정합니다.

  • mysqli :: set_charset은 클라이언트와 서버 간의 데이터 교환에 대한 인코딩 형식을 결정하여 양 당사자가 일관되도록합니다.

  1. 우선 순위와 일치

데이터베이스에 연결하면 mysqli :: set_charset이 명시 적으로 설정되지 않은 경우 클라이언트와 서버 간의 통신은 서버의 기본 문자 세트 ( 일반적 으로 구성이 변경되지 않는 한)을 사용합니다. 데이터베이스 기본 문자 세트가 UTF8MB4 이고 클라이언트 커뮤니케이션 인코딩이 LATIN1 일 때는 데이터가 끊어집니다.

따라서 데이터베이스 테이블이 UTF8MB4 인 경우에도 서버가 SET_CHARSET을 사용하여 서버에 동일한 인코딩을 사용하여 데이터를 전송하도록 지시하지 않으면 쿼리 결과 또는 데이터를 삽입하면 인코딩 오류가 발생할 수 있습니다.


항상 mysqli :: set_charset을 호출하는 것이 권장되는 이유는 무엇입니까?

클라이언트와 서버 간의 일관되지 않은 문자 세트로 인해 차량 코드를 피하기 위해 모범 사례는 데이터베이스에 연결 한 후 즉시 호출하는 것입니다.

 $mysqli->set_charset('utf8mb4');

이것은 다음과 같이 보증합니다.

  • 전송 된 데이터 인코딩은 데이터베이스 인코딩과 일치합니다.

  • 쿼리 결과가 올바르게 인코딩됩니다

  • 불일치를 인코딩하여 발생하는 예외 문자 문제를 피하십시오


결론적으로

  • 데이터베이스 기본 문자 세트는 데이터의 스토리지 인코딩을 결정합니다.

  • mysqli :: set_charset 클라이언트가 서버와 통신 할 수있는 인코딩 형식을 결정합니다.

  • 두 사람은 데이터가 올바르게 전송되고 저장되도록 일관성이 있어야합니다.

  • 데이터베이스 기본 문자 세트가 UTF8MB4 인 경우에도 SET_CHARSET을 사용하여 PHP 코드에서 연결 인코딩을 명시 적으로 설정해야합니다.


참조 코드 예제

 $mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');

if ($mysqli->connect_error) {
    die('연결이 실패했습니다:' . $mysqli->connect_error);
}

// 클라이언트 연결 문자를 설정하십시오 utf8mb4
$mysqli->set_charset('utf8mb4');

$sql = "SELECT * FROM users";
$result = $mysqli->query($sql);

while ($row = $result->fetch_assoc()) {
    echo $row['username'] . "<br>";
}

$mysqli->close();

이렇게하면 데이터베이스에서 검색된 중국어 또는 특수 문자가 차단되지 않도록합니다.