我正在为 iOS
开发一个聊天应用程序,我正在尝试将聊天文本存储在 MySQL
数据库中。普通文本工作正常,即使是特殊字符,如德语“umlaute”。我将文本作为 Json 发送到服务器。
如果我使用 iOS
表情符号键盘中的表情符号,则不起作用,如下所示:
{"userid":"1","message":"Test 123 ⚽️❤️😃😀🇩🇪😊💭"}
我首先将 MySQL
数据库表设置为 UTF-8
。结果是字符:"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
似乎正确接收了它。
谢谢!
最佳答案
我已经解决了将表和列设置为 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已评论,如果您的数据库中已经有表情符号,请小心(这不是我的情况,因为我之前无法存储任何表情符号)
关于php - iOS 表情符号未正确存储在 MySQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27514212/