2017-03-09 27 views
4

我正在觀察包含單個表情符號的VARCHAR字段的一些奇怪的MySQL行爲。連接,數據庫和列都是utf8mb4編碼和整理。MySQL爲單個表情符號返回多個結果

有一個表categoriesidtitle字段。有三行,標題是,和。

當我運行一個查詢查找具有標題的行時,我也獲得了所有其他單行emojis行,就像MySQL將它們視爲相同的字符一樣。

Query for credit card emoji returning all other single emoji rows

預期的行爲應該是隻有一行返回。

回答

1

你需要整理utf8mb4_unicode_520_ci;較舊的排序規則將Emoji視爲平等。

+0

要查看帶有Unicode 9.0的MySQL 8.0,請參閱[_here_](http://mysql.rjweb.org/utf8mb4_collat​​ions.html)中的'utf8mb4_0900_ai_ci'。 –

2

整理確定兩個字符是否被認爲是相等的。

https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

如果你只想要一個確切的二進制比賽,你可能需要指定二進制排序。

這裏的一些語法示例爲latin1

https://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

+0

事實上,問題似乎與'utf8mb4_general_ci'一樣,而'utf8mb4_unicode_ci'與預期的emoji一起使用。 – maknz

+1

@maknz - 你的測試出錯了; unicode是不夠的;你需要unicode_520;看到我的答案。 –

+0

使用'utf8mb4_unicode_ci'解決了這個問題,520做unicode本身不能做什麼? – maknz

相關問題