2012-03-01 43 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⃣#⃣⬆⬇⬅➡↗↖↘↙↙⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌©®