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 문자열 세트 문제에 대해.
테이블 구조는 다음과 같습니다.
다음 코드:
<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>
그런데 저장하고 나면 아래와 같이 ?
이 됩니다.
해결책을 찾고 있습니다.
맞습니다.
전제에 대해 이야기해 보겠습니다. utf8mb4와 utf8의 차이점은 utf8은 3비트 바이트코드만 사용하여 데이터를 저장하는 반면 utf8mb4는 4비트 바이트코드를 사용하여 데이터를 저장한다는 것입니다.
이모지 표현은 앞 문단을 통해 이스케이프된 4비트 바이트코드이며, 그 자체로는 읽을 수 없는 문자이므로 데이터베이스 클라이언트에 "?"가 표시됩니다.
프런트 엔드에서 이모티콘을 지원하는 경우 이모티콘 표현이 표시됩니다.
클라이언트가 utf8mb4를 지원하는지 확인하세요. 설정된 이름을 사용하는 것이 가장 좋습니다.