
下午一個朋友來電說,不知道為什麼,在網頁上寫了一篇文章,但只要一存檔,這篇文就莫名其妙的只剩下一半,後半段完全消失不見?
回問是不是文章太長了呢?
畢竟以 MySQL 為資料庫驅動的網站,文字型的欄位一般都有長度的限制喔。
朋友邊喊著文章一點也不長,之前貼過更長,長好幾倍的內容都沒事,同時快手把他要貼的文章直接 iMessage 過來了。
看了一下,文章內容的確不是很長,不像是長度的問題。
不過段落間一個顯眼的紅色心型的表情符號 emoji(💕),立刻引起了注意,問題可能就是出在這個 emoji 上也說不定。
手起刀落(其實是按下刪除鍵),把那個漂亮的 emoji 給刪掉,再回傳給朋友:你再貼一次試試看。
這次就OK了。
問題果然就是出在這個表情符號上。
MySQL 不支援 4 個字節的新版表情符號
記得在不太久遠以前的上古年代,如果想在文章裡使用『表情符號』,多半是用兩三個標準的半形符號組合成一個像是笑臉、哭臉那樣,好比 :), XD, ^.^ 。
複雜一些的,想像力和手指靈活的,還有那種組合更多符號的 emoji,像是 ( ͡° ͜ʖ ͡°) (ᵔᴥᵔ) ಠ╭╮ಠ ¬_¬。
當然,
現在看起來這種表情文字的表達法是感覺有點陳舊了,
特別是 iPhone 等智慧手機這麼普及的年代,每個系統都內建了一大堆色彩繽紛,細緻可愛的表情符號鍵盤,很少人會再去研究怎麼用上面那樣的文字組合,直接改用emoji鍵盤來建立顏文字了。
不僅手機,這種emoji鍵盤也都移植到桌面版的系統,所以不管是用手機還是用電腦,這些表情符號都可以通用。
而問題就出在這裡。
以前的顏文字,使用的多半是單一字節(就是一般的半形文字)或是兩字節(漢字或是特殊符號)的字符,這種1~3個字節以內的,通用的萬國碼 UTF8 的字符集都是支援的,但UTF8 的字符集,最多也就只支援到 1~3 字節的字符,再多就沒有了。
但是現下流行的新版的彩色emoji,則都是屬於 4 個字節的字符,所以一存檔,MySQL 就自動截斷,完全無法寫入資料庫。
如果要在 MySQL 中存儲這些特殊符號,那麼就要進行一些修改作業。
MySQL 資料庫字符集,從 UTF8 改為 UTF8MB4
來,我們接著就研究研究,怎麼把 MySQL 的資料庫,改到可以支援 4 字節字符的新款表情符號。
關鍵就是在 utf8mb4 這個字符集。
MySQL 5.5.3 版之後,就內建了這個新的 utf8mb4 的字符集,在之前,可就只有 utf8 這樣。
理論上大家應該都是使用舊的 utf8 字符集,從 utf8 修改字符集到 utf8mb4 的這個程序,完全不需要有壓力,沒有副作用,因為這是擴充原有的字符,原本的 utf8 在編碼和存儲上,轉移到 utf8mb4 也是一樣相容的,不會有任何的錯誤,可以放心大膽的進行轉換。
轉換的程序分兩部分,一個是 MySQL 資料表,另一部分則是修改 PHP 的程式碼。
在 MySQL 中轉換字符集到 UTF8MB4 的步驟與語法
首先來看一下在 MySQL 裡面要改哪些:
- 開啟 cPanel 裡的 phpMyAdmin。
- 進入你的資料庫,點選存儲內文的資料表。
- 然後鍵入 SQL 語法:
ALTER TABLE
table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci; - 收工。
PHP 頁面中,修改 utf8mb4 的語法
轉換完 MySQL 資料庫之後,在網站前台也別忘了要一併修改相關的語法。
如果沒有修改 PHP,那麼雖然可以把emoji存進資料庫,但是在網頁上顯示的時候,依然會變成亂碼,或是以 ???? 問號來取代正確的表情圖示。
修改的部分也是很簡單,就是一小段宣告資料庫使用字符集的那部分:
原本的原始碼:
mysqli_query($databaseLink,"SET NAMES 'utf8'");
改為:
mysqli_query($databaseLink,"SET NAMES 'utf8mb4'");
就這麼簡單,全部轉換成功。
完成轉換後,
就可以盡情的放入任何你喜歡的這種新型的色彩繽紛的表情圖示囉。
😀😁😂🤣😃😄😅😆💋
試試看吧!
我們也有臉書專頁了,歡迎大家按讚加入喔: @5min.reading