天天看點

在不更新 mysql 的情況下直接使用 mysql utf8 存儲 超過三個位元組的 emoji 表情

由于現在資料庫的版本是<code>5.5.2</code>,但是看網上說要直接存儲<code>emoji</code>表情,需要更新到<code>5.5.3</code>然後把字元集設定為<code>utf8mb4</code>,但是更新資料庫感覺屬于敏感操作。

考慮了多久之後直接考慮使用正則來替換,但是<code>emoji</code>表情的<code>unicode</code>碼太多了,在網上找了一份代碼,還是2年前更新的,想了想還是算了。

最簡單的辦法就是直接找到接受到的文本中的字元串中4個位元組的内容,做<code>rawurlencode</code>編碼,再入庫。輸出的時候再替換回來,然後再用<code>rawurldecode</code>轉碼回<code>unicode</code>到手機再解析為<code>emoji</code>表情。

擷取字元串長度<code>mb_strlen</code>,按字元來截取字元串<code>mb_substr</code>(<code>mb_strcut</code>是按位元組來截取,有差別)。

在不更新 mysql 的情況下直接使用 mysql utf8 存儲 超過三個位元組的 emoji 表情

php 就這麼輕松愉快的解決了。

考慮到想使用php裡面的套路,對原字元串逐個字元擷取其長度,如果超過3個位元組,那麼則編碼下,就能存儲了,依照上次的經驗,我寫了如下代碼

單個單個的來,能擷取到正确的位元組數,但是如何保證切割字元串的時候是正确的呢?我找遍了城市所有的街道,都沒有,找到我要的方法.

在不更新 mysql 的情況下直接使用 mysql utf8 存儲 超過三個位元組的 emoji 表情
在不更新 mysql 的情況下直接使用 mysql utf8 存儲 超過三個位元組的 emoji 表情