我正在觀察包含單個表情符號的VARCHAR字段的一些奇怪的MySQL行爲。連接,數據庫和列都是utf8mb4編碼和整理。MySQL爲單個表情符號返回多個結果
有一個表categories
與id
和title
字段。有三行,標題是,和。
當我運行一個查詢查找具有標題的行時,我也獲得了所有其他單行emojis行,就像MySQL將它們視爲相同的字符一樣。
預期的行爲應該是隻有一行返回。
我正在觀察包含單個表情符號的VARCHAR字段的一些奇怪的MySQL行爲。連接,數據庫和列都是utf8mb4編碼和整理。MySQL爲單個表情符號返回多個結果
有一個表categories
與id
和title
字段。有三行,標題是,和。
當我運行一個查詢查找具有標題的行時,我也獲得了所有其他單行emojis行,就像MySQL將它們視爲相同的字符一樣。
預期的行爲應該是隻有一行返回。
你需要整理utf8mb4_unicode_520_ci
;較舊的排序規則將Emoji視爲平等。
整理確定兩個字符是否被認爲是相等的。
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
要查看帶有Unicode 9.0的MySQL 8.0,請參閱[_here_](http://mysql.rjweb.org/utf8mb4_collations.html)中的'utf8mb4_0900_ai_ci'。 –