一直以來,都不是十分明瞭MySQL中utf8_unicode_ci和utf8_general_ci這兩個排序規則的區別,因此查了下資料記錄一下。
※ utf8_unicode_ci和utf8_general_ci對於中、英文來說基本上沒有什麼差別,但是如果有用到俄語、法語、德語,就一定要使用utf8_unicode_ci。
兩者的直觀對比:
utf8_general_ci校對速度快,但準確度稍差(一般的開發中忽略不計,還是要以速度爲首選),一般就選用這個就可以了。
utf8_unicode_ci準確度高,但校對速度稍慢。
然後看數據庫的時候,又發現了我對utf8和utf8mb4兩者的區別也是不清楚。。。
MySQL在5.5.3之後增加utf8mb4編碼,mb4就是most bytes 4的意思,是用來兼容四字節的unicode。
自問自答:
utf8已經能夠存下大部分中文漢字,爲什麼還要使用utf8mb4?
utf-8編碼存儲的可能2個字節、3個字節、4個字節的字符,但是在MySQL中,utf8編碼只支持3字節的數據,而移動端的表情數據(比如emoj表情)是4個字節的字符。所以直接往採用utf-8編碼,如果插入表情數據和不常用的漢字,以及任何新增的 Unicode 字符等數據,數據庫都會報錯。
兩者的直觀對比:
utf8 空間佔用小,一般開發足夠。
utf8mb4會多佔用點空間,所以當有類似於存儲表情需求的時候,使用這個。