我正在插入一个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字符/精灵,但不知道如何处理它。
答案 0 :(得分:1)
您正在尝试插入一个跨越4个字节的字符,因此您必须将该列转换为utf8mb4
字符集。
utf8
字符集限制为跨越3个字节的字符(Unicode字符U + 0000到U + FFFF)。
答案 1 :(得分:0)
你也有连接的utf8字符集吗?
在PDO-connection string中添加“; charset = utf8”,或执行查询“set names utf8”。