MySQL插入字符串出错 - UTF-8?

3

我正在向mysql数据库插入数据。在尝试插入时,我遇到了以下错误:

Incorrect string value: '\xF0\x9F\x87\xB7\xF0\x9F...' for column 'field_4' at row 1

我曾经认为只需将列编码更改为utf8mb4并进行测试即可解决此错误,但最近该错误再次出现。我正在使用php解析字符串,并在插入之前运行以下函数...

function strip_emoji($subject) {
    if (is_array($subject)) {
        // Recursive strip for multidimensional array
        foreach ($subject as &$value) $value = $this->strip_emoji($value);
        return $subject;
    } else {
        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, '', $subject);

        // Match Miscellaneous Symbols and Pictographs
        $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
        $clean_text = preg_replace($regexSymbols, '', $clean_text);

        // Match Transport And Map Symbols
        $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
        $clean_text = preg_replace($regexTransport, '', $clean_text);
        return 
}

有几个类似的问题,但我仍然遇到了这些错误。有什么进一步的建议可以防止这个错误吗?我知道它是一个表情符号Unicode字符/精灵,但不确定如何处理它。


这个问题解决了吗?怎么解决的? - randomx
2个回答

1
你正在尝试插入一个跨越4个字节的字符,因此你需要将列转换为utf8mb4字符集。 utf8字符集仅限于跨越3个字节的字符(Unicode字符U+0000到U+FFFF)。

0

我正在使用Codeigniter框架(并不重要,只是提一下),目前我的字符集和数据库字符集都设置为UTF8,并采用utf8_general_ci排序规则。 - eric MC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接