Doctrine2没有保存utf-8

Tjo*_*rie 3 utf-8 symfony doctrine-orm

在我的Symfony 2应用程序中,我的Doctrine charset设置为UTF8.

我有这个字符串,首先 使用mb_detect_encoding它的UTF-8.

但是将其保存到Doctrine实体的文本字段中会出现以下错误:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\\xF0\\x9F\\x8C\\xB9 h...' for column 'text' at row 1",
Run Code Online (Sandbox Code Playgroud)

到底发生了什么事?

Dan*_*ack 5

错误消息告诉您发生了什么.数据库引擎无法在数据库中存储字符串值\ xF0\x9F\x8C\xB9.

这似乎是字符U + 1F339 ROSE,它位于补充多语言平面中,需要4个字节来存储.

MySQL UTF8实际上并不支持所有UTF8,并且基本上根本不能用于4字节字符.有关如何解决此问题的建议,请参阅此答案,但基本上,如果要存储这些字符,则需要切换到使用"utf8mb4_unicode_ci"排序规则的"utf8mb4"字符集.