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

标签 php ios mysql objective-c utf-8

我正在为 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/

相关文章:

iOS Google Sign In SDK webview 签名后不关闭

ios - 如何使用 ECSlidingViewController 知道菜单何时为 "open"

mysql - 使用 Node.JS 的 1and1 IONOS 数据库

php - PHP中 explode 两次的更好方法

javascript - 成功过程后如何使文件重定向到页面

php - 是utf-8的问题吗? php mysql

php - Woocommerce WP - 从 post_type = shop_order | 获取 _sku 值SQL查询

PHP:执行 Select 语句

ios - -[__NSCFDictionary setObject :forKey:]: mutating method sent to immutable object

php - 使用php将日期发送到数据库