mysql支援utf8mb4字元集,即已支援emojiEmoji的儲存。
現在想用emoji作為where的一個條件進行select,是否有可能實現?怎麼實現呢?
回複討論(解決方案)
只要你能在編輯器中打出來,查詢和其他字元沒什麼區別
我用chrome +phpmyadmin中用mysql搜:
select * from `table` where `nickname` like convert(_utf8 '%
鬱悶,發個emoji居然被截了,改用論壇支援的emoji湊合吧。
我用chrome +phpmyadmin中用mysql搜:
select * from `table` where `nickname` like convert(_utf8 '%%' USING utf8mb4) COLLATE utf8mb4_general_ci
結果為空白。但是可以肯定有一條記錄的nickname內含有這個emoji。
我手邊的裝置都不支援 emoji,無法給出準確的運算式
但原理應該是這樣的:
如果你的欄位是 utf8mb4_general_ci 的,那麼欄位中的 emoji 就是以 4 位元組的 utf-8 存在的
如果你能輸入 emoji 到字串,那麼查詢語句就是
select * from `table` where `nickname` like '%$txt%'
如果你想指定某個 emoji,而你又無法輸入的話,可以用十六進位內碼錶示。比如
$ch = "\xf0\x9f\x98\x84";
$ch = "\xf0\x9f\x98\x83";
如果沒有 emoji 對照表,那麼寫個小程式用支援 emoji 的裝置探測一下就知道了
chrome裝了個擴充可以輸入emoji,對照表我也有。
我也試過用select * from `table` where `nickname` like '%\xf0%' ; 結果也是為空白。這一點還是沒想明白為啥。
比較奇怪的一點就是:phpmyadmin上看4位元組的emoji是問號,3位元組的能正常顯示。而直接讀庫取出來echo的話是能正常顯示的,證明mysql已經支援4位元組的emoji了。那麼看到問號只是因為phpmyadmin的緣故?
phpmyadmin上看4位元組的emoji是問號這是正常的
雖然你的欄位是 utf8mb4 但 phpmaiadmin 是 utf-8 的,編碼轉不過來自然就是問號了
你 nickname like '%\xf0%' 是不行的,因為文本方式下是按字尋找的 \xf0 不會單獨存在
要聲明 nickname 是二進位的才行
BINARY nickname like '%\xf0%'
select * from `table` where BINARY `nickname` like '%\xf0%' ;
也為空白哦。。。
select * from `table` where BINARY `nickname` like '%整個emoji%' ;
這樣就可以了,感謝老xu的熱心幫忙