MySQL 处理 utf8mb4_unicode_ci 的 unicode 文本

MySQL handle unicode text for utf8mb4_unicode_ci

尝试将字符串插入 table 时出现以下错误。

Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x98\x8D...' for column 'preview_text' at row 1

\xF0\x9F\x98\x8D是笑脸表情

正如我从以前的 Whosebug 问题中了解到的,我需要将排序规则设置为 utf8mb4_unicode_ci,但默认情况下是这样,而且仍然如此。

我还应该改变什么?

连接后你应该define the charset像这样:

SET NAMES 'utf8mb4';

通常你会在你的客户端中有一个选项来设置它(比查询更优雅),例如: 节点JS:

mysql.createPool({
    ...
    charset : 'utf8mb4'
});

和PHP的MySQLi

$mysqli->set_charset("utf8mb4");