0

我有以下字符串:

\ud83d\udc57 DESTINATION OF SHOPAHOLIC\n\u260e 088216013304 \/ 085713900029\n\ud83d\udcf1 BB 328713BD\n\u2712 LINE : ladydhie\n\ud83d\udcb3 BCA \n\ud83d\udc8b KEEP CALM AND HAPPY SHOPPING!!!\ud83d\udc8b

我想在 MySQL 中存储为字符串,但是做一个简单的插入让我空了。有什么特别需要我做的吗?

我使用 Symfony2 和 Doctrine 作为 ORM。所以我有一个名为 User 的对象,它有一个名为 bio 的列并存储为一个字符串,但是当我执行以下操作时:

user->setBio(\ud83d\udc57 DESTINATION OF SHOPAHOLIC\n\u260e 088216013304 \/ 085713900029\n\ud83d\udcf1 BB 328713BD\n\u2712 LINE : ladydhie\n\ud83d\udcb3 BCA \n\ud83d\udc8b KEEP CALM AND HAPPY SHOPPING!!!\ud83d\udc8b) 

这给了我存储在数据库中的空生物。我应该怎么做才能正确存储它。

4

2 回答 2

1

确保您的表列的排序规则是utf8mb4并且 MySQL 连接排序规则是utf8mb4.

MySQL 的基本utf8字符集仅支持来自基本多语言平面的字符(UTF-8 中为 3 个字节)。U+1F457 DRESS 等表情符号不在 BMP 中,因此只能以完整的 4 字节形式存储。

如何检查 mysql 连接排序规则?

我对 Doctrine 不熟悉,但看起来您应该能够将charset连接pdo_mysql设置为utf8mb4. 您也可以将my.cnf配置设置default-character-setutf8mb4.

另外,我不确定您在上面使用的语法是什么,但 PHP 没有\u转义。要在 PHP 字符串中包含字符 U+1F457,您应该直接将其键入为'',并将您的 .php 文件保存为 UTF-8,或者包含 UTF-8 字节编码'\xF0\x9F\x91\x97'

于 2013-09-15T14:48:45.907 回答
-1

我设法通过以 json_format 存储刺痛并在我访问它时执行 json_decode 来绕过整个事情:)

于 2015-10-31T18:35:49.313 回答