【问题标题】:iOS emoticons not stored correctly in MySQLiOS 表情符号未正确存储在 MySQL 中
【发布时间】:2014-12-16 21:27:01
【问题描述】:

我正在为iOS 开发一个聊天应用程序,我正在尝试将聊天文本存储在MySQL 数据库中。普通文本可以正常工作,即使是像德语“变音符号”这样的特殊字符。我将文本作为 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 正确接收了它。

谢谢!

【问题讨论】:

  • 您需要确保通过整个渲染管道使用相同的字符集。你忘记了某事,某处,例如php->mysql 连接。
  • 啊谢谢!在数据库配置文件中将 CodeIgniter 设置为 UTF-8。我将其设置为 UTF-16 并且可以正常工作。谢谢马克,第二个帖子是正确的答案!

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


【解决方案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 所评论的,如果您的数据库中已经有表情符号,请小心(这不是我的情况,因为我之前无法存储任何表情符号)

【讨论】:

  • 注意:如果您当前存储了表情符号,这将损坏您所有的表情符号数据。
  • 谢谢walapu,我已经在回答中添加了通知
猜你喜欢
  • 2015-07-29
  • 2019-07-15
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2018-12-14
  • 2014-09-20
相关资源
最近更新 更多