>백엔드 개발 >PHP 튜토리얼 >MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

WBOY
WBOY원래의
2016-08-04 09:21:141602검색

MYSQL utf8mb4 문자열 세트 문제에 대해.

테이블 구조는 다음과 같습니다.

MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

다음 코드:

<code class="php">$db     = new mysqli('x', 'xxx', 'xxxxx');
$db->select_db('xxx');
$db->set_charset('utf8mb4');

//这里是一个emoji表情
$contents = <<<EOT
"\ud83d\udca5"
EOT;

$contents = json_decode($contents). "hello";
echo $contents, "\t\n";

$sql    = "INSERT INTO `utf8mb4`(`contents`) VALUES('$contents')";
echo $sql, "\t","\n";
$db->query($sql);
print_r($db->error_list);
echo "\t\n";
exit();</code>

그런데 저장하고 나면 아래와 같이 ?이 됩니다.

MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

해결책을 찾고 있습니다.

답글 내용:

MYSQL utf8mb4 문자열 세트 문제에 대해.

테이블 구조는 다음과 같습니다.

MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

다음 코드:

<code class="php">$db     = new mysqli('x', 'xxx', 'xxxxx');
$db->select_db('xxx');
$db->set_charset('utf8mb4');

//这里是一个emoji表情
$contents = <<<EOT
"\ud83d\udca5"
EOT;

$contents = json_decode($contents). "hello";
echo $contents, "\t\n";

$sql    = "INSERT INTO `utf8mb4`(`contents`) VALUES('$contents')";
echo $sql, "\t","\n";
$db->query($sql);
print_r($db->error_list);
echo "\t\n";
exit();</code>

그런데 저장하고 나면 아래와 같이 ?이 됩니다.

MYSQL utf8mb4가 잘못된 이모티콘 표현을 삽입합니다.

해결책을 찾고 있습니다.

맞습니다.
전제에 대해 이야기해 보겠습니다. utf8mb4와 utf8의 차이점은 utf8은 3비트 바이트코드만 사용하여 데이터를 저장하는 반면 utf8mb4는 4비트 바이트코드를 사용하여 데이터를 저장한다는 것입니다.
이모지 표현은 앞 문단을 통해 이스케이프된 4비트 바이트코드이며, 그 자체로는 읽을 수 없는 문자이므로 데이터베이스 클라이언트에 "?"가 표시됩니다.
프런트 엔드에서 이모티콘을 지원하는 경우 이모티콘 표현이 표시됩니다.

클라이언트가 utf8mb4를 지원하는지 확인하세요. 설정된 이름을 사용하는 것이 가장 좋습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.