MySQL不会处理一些utf8字符

时间:2014-04-17 16:22:11

标签: php mysql utf-8 char

表:

CREATE TABLE `test` (
  `f` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

刚连接后我发送以下SQL:

SET NAMES utf8;

然后SQL:

INSERT INTO `test` (`f`) VALUES ("сс-е в терновнике");

结果在表中我有1条记录,其值为“с”,最多只能签名。 有没有机会正确处理所有这些符号? 如果这很重要,所有这些都是从PHP完成的。

1 个答案:

答案 0 :(得分:3)

该字符为Unicode Character 'SMILING FACE WITH SMILING EYES' (U+1F60A)

U + 1F60A位于平面1,即辅助多语言平面,但MySQL的utf8仅支持平面0,即基本多语言平面。所以你必须使用utf8mb4。

字体中也没有广泛支持该符号,因此您可能很难显示它。


重新评论,这里是过滤基本平面之外的字符的演示。

<?php

$str = "сс-е в терновнике";
$str = preg_replace('/[^\x{0000}-\x{ffff}]/u', '', $str);
echo $str . "\n";

但如果从我上面的回答中不清楚,MySQL 支持utf8mb4中的补充平面。