현재 위치: > 최신 기사 목록> 유니 코드 이모티콘 스토리지의 고장 문제를 피하려면 mysqli :: get_charset을 사용하십시오.

유니 코드 이모티콘 스토리지의 고장 문제를 피하려면 mysqli :: get_charset을 사용하십시오.

M66 2025-05-23

MySQL 데이터베이스, 특히 주석, 닉네임 및 채팅 레코드와 같은 텍스트 필드를 사용하여 사용자 입력 컨텐츠를 저장할 때, 우리는 종종 문제가 발생합니다. 사용자가 이모티콘 이모티콘 또는 일부 특수 유니 코드 기호에 들어가면 데이터베이스에 저장이 실패하거나 저장이 성공하면 꺼져서 꺼내면 (?)가 표시되거나 질문 표시됩니다 ( ? ).

MySQL 데이터베이스 (예 : UTF8 )의 기본 문자 세트는 4 바이트 유니 코드 문자 (대부분의 이모 지 포함)를 완전히 지원하지 않기 때문입니다. 이 문제를 해결하기 위해 데이터베이스 수준 구성 외에도 PHP 코드는 클라이언트에 연결된 문자 세트가 올바르게 설정되어 있는지 확인해야합니다. 이 기사에서는 mysqli :: get_charset 함수를 사용하여 유니 코드 이모티콘을 저장할 수없는 문제를 해결하기 위해 연결 문자 세트가 올바른지 확인하고 연결하는 방법을 설명합니다.

문제 배경

MySQL의 UTF8 인코딩은 실제로 최대 3 바이트의 문자 만 지원하는 반면 이모티콘과 일부 유니 코드 문자는 4 바이트가 필요하므로 UTF8MB4를 사용해야합니다. 서버 측 (데이터베이스 테이블, 필드, 연결)이 UTF8MB4를 설정하지 않으면 이러한 문자는 삽입되지 않거나 잘라내어 물음표로 교체됩니다.

일반적으로 세 가지 작업을 수행해야합니다.

  1. 데이터베이스 및 테이블의 문자는 UTF8MB4 로 설정됩니다.

  2. 데이터베이스에 연결할 때 UTF8MB4를 지정하십시오.

  3. PHP 코드에 사용 된 문자 세트가 올바른지 확인하십시오.

mysqli :: get_charset을 사용하여 문자 세트를 확인하십시오

PHP의 MySQLI 클래스는 get_charset 메소드를 제공하며 현재 연결의 문자 세트 정보를 얻는 데 사용할 수 있습니다. 이 기능을 사용하면 현재 연결이 UTF8MB4를 사용했는지 여부를 코드를 확인하고 일치하지 않으면 조정할 수 있습니다.

샘플 코드는 다음과 같습니다.

 <?php
// 데이터베이스 연결 정보
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_errno) {
    die('연결이 실패했습니다: ' . $mysqli->connect_error);
}

// 현재 연결 문자 세트를 확인하십시오
$charsetInfo = $mysqli->get_charset();
echo '현재 연결 문자 세트: ' . $charsetInfo->charset . PHP_EOL;

// 그렇지 않다면 utf8mb4,그런 다음 설정하십시오 utf8mb4
if ($charsetInfo->charset !== 'utf8mb4') {
    if (!$mysqli->set_charset('utf8mb4')) {
        die('문자 세트를 설정하지 못했습니다: ' . $mysqli->error);
    } else {
        echo '연결 문자 세트가 설정되었습니다 utf8mb4' . PHP_EOL;
    }
}

// 예제 삽입물이 포함되어 있습니다 Emoji 데이터의 데이터
$stmt = $mysqli->prepare('INSERT INTO messages (content) VALUES (?)');
$content = '시험 Emoji ?? ??';
$stmt->bind_param('s', $content);

if ($stmt->execute()) {
    echo '데이터 삽입이 성공적으로 삽입됩니다!' . PHP_EOL;
} else {
    echo '삽입 실패: ' . $stmt->error . PHP_EOL;
}

$stmt->close();
$mysqli->close();
?>

데이터베이스 구성 제안

코드 레벨 설정 외에도 이모티콘 및 기타 4 바이트 문자를 완전히 지원하려면 다음과 같이 필요합니다.

  1. 데이터베이스, 테이블 및 필드 문자 세트 설정 :

     ALTER DATABASE your_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  2. 연결 매개 변수 : MySQL 구성 파일의 [MySQLD] 부분에 포함되어 있는지 확인하십시오.

     character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    

요약

mysqli :: get_charset을 사용하면 연결 문자 세트가 코드에서 올바른지 여부를 동적으로 확인하고 필요한 경우 수정할 수 있습니다. 데이터베이스와 테이블의 올바른 구성을 결합하면 유니 코드 이모티콘을 저장할 수없는 문제를 완전히 해결할 수 있습니다. 이런 식으로 사용자는 손실 또는 손실 코드에 대해 걱정하지 않고 쉽게 응용 프로그램에서 다양한 이모티콘을 사용할 수 있습니다.