iOS表情符号未在MySQL中正确存储

时间:2014-12-16 21:27:01

标签: php ios mysql objective-c utf-8

我正在为iOS开发聊天应用,并且我试图将聊天文本存储在MySQL数据库中。普通文本可以正常工作,甚至是像德语和变音符号这样的特殊字符。我将文本作为Json发送到服务器。

如果我使用iOS表情符号键盘中的表情符号,那么什么行不通:

{"userid":"1","message":"Test 123 ⚽️❤️"}

我首先将MySQL数据库表格设为UTF-8。结果是chars:"Test 123 ⚽️❤️"被存储,其他表情符号被截断。我必须添加我在PHP日志中看到如上所示的完整字符串,因此PHP似乎没有正确接收它的问题。这是它在php日志中的样子:

INFO  - 2014-12-16 22:25:04 --> New Feed Post. Json: {"userid":"1","message":"Djjdhd"}

问题是MySQL无法正确存储它。我将整个数据库更改为UTF-16甚至UTF-32,因为我认为这些字符不在UTF-8范围内,而是在UTF-16范围内。

结果是表情符号还没有被截断,但在数据库中显示为问号,如下所示:

"Test 123 ⚽️❤️????????????"

知道为什么这些表情符号没有正确存储?

我看过这篇文章(iPhone emoticons insert into MySQL but become blank value),但似乎PHP正确收到了该帖子。

谢谢!

1 个答案:

答案 0 :(得分:1)

我已解决了将表格和列设置为utf8mb4的类似问题:

对于每张桌子:

ALTER TABLE table_with_emojis CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

表格中的每一列:

ALTER TABLE table_with_emojis CHANGE column_with_emojis VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

正如本文http://blog.arkency.com/2015/05/how-to-store-emoji-in-a-rails-app-with-a-mysql-database/中所解释的那样(它适用于Ruby on Rails,但您可以将其应用于PHP)。

在SO上有一个很好的答案,有更多细节和其他可能的问题:https://stackoverflow.com/a/279279/2412686

由于walapu发表了评论,如果您的数据库中已有表情符号,请务必小心(这不是我的情况,因为我之前无法存储任何表情符号)