2012-03-01 83 views
10

我们正在开发一个iPhone应用程序,它可以将表情符号从iPhone发送到服务器端PHP并插入到MySQL表中。我正在做服务器端的工作。iPhone表情符号插入到MySQL中,但成为空白值

但插入语句执行成功后,插入的值变为空白。
我可以正确插入字段(varchar)的是文本,但是一旦包括图释,
只是可以插入文本并且表情符号会自动剪切。

有人给我建议将字段类型设置为博客,以便它可以存储图像数据。
但插入的值并不总是包含表情图案和大小很小。

*我正在使用mysql_real_escape_string来插入值。

+0

向我们展示插入语句 – 2012-03-01 02:27:09

+0

简短回答:您必须在MySQL中使用'utf8mb4'。 – 2017-09-07 13:20:08

回答

22

大多数iOS emojis都使用Unicode表格基本多语言平面以上的代码点。例如(SMILING FACE WITH OPEN MOUTH和SMILING EYES)在U + 1F604。

OS X character viewer

现在,看到http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html

版本5.5之前的MySQL仅支持包含U + 0000和U + FFFF(即仅实际UTF-8的子集; MySQL的utf8不是真正的UTF-8)之间的字符的BMP的UTF-8。它不能存储代码点U + 1F604或其他类似的“高位字符”中的字符。 MySQL 5.5+支持utf8mb4(实际的UTF-8),utf16utf32,它们能够对这些字符进行编码。如果您使用的是MySQL 5.5+,请使用其中一个列字符集,并确保您的连接编码使用相同的字符集。如果您使用MySQL < 5.5,则必须使用BLOB列类型。该类型存储原始字节而不关心其中的“字符”。缺点是你无法有效地搜索或索引文本。

+0

感谢您的回复。我们现在使用的MySQL版本是_5.1.54 _...所以,我会尝试blob数据类型或升级到_5.5_并使用'utf8mb4'作为我的领域。我会回来的;) – 2012-03-01 04:51:25

+0

谢谢@deceze。我刚刚证实的是,在我们的MySQL _5.1.54_中将字段类型从varchar更改为blob后,表情符号将被正确存储。我们正在讨论什么应该适用于我们的服务器端,因为某些配置会在php代码(或CakePHP框架)中更改。 – 2012-03-01 05:40:40

+1

最后,我们升级到** 5.5 + **,表情符号正常显示,以便它可以与我们未来的发展兼容。再次感谢你,@deceze。 – 2012-03-02 01:10:28

1

一些表情符号字符适用于较旧的非blobed mysql配置,因为它们使用3字节代码点进行编码,而mysql可以存储3字节字符。如果你不能升级mysql或者出于任何原因使用blob,你可以擦掉4个字节的代码点并保留3个字节的代码点。

如果您的计算机的表情符号功能,这里是3个字节的iOS表情符列表:

☺❤✨❕❔✊✌✋☝☀☔☁⛄⚡☎➿✂⚽⚾⛳♠♥♣ ♦〽☕⛪⛺⛲⛵✈⛽⚠♨1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣0⃣#⃣⬆⬇⬅➡↗↖↘↙↙⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌©®