我正在为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
正确收到了该帖子。
谢谢!
答案 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发表了评论,如果您的数据库中已有表情符号,请务必小心(这不是我的情况,因为我之前无法存储任何表情符号)