2011/08/27

MySQL 連線校對的 utf8_general_ci 與 utf8_unicode_ci 有何差異?

太久沒用就忘了,還是簡單紀錄一下。
MySQL 的官方文件裡有說明:Unicode Character Sets

utf8_unicode_ci 會依照 Unicode 標準去處理每一個字元,但 utf8_general_ci 為了提升速度,會用相近於 Unicode 標準去處理。也就是說 utf8_general_ci 會比較不準確(但比較快)。

就拿官方文件裡的文字 ß 來說好了,在德文或其他語言中,ß 等同於 ss,但在 utf8_general_ci 下會被省略而被視為是 s。因此如果有個欄位是設定成 utf8_general_ci,如果以 s 去搜尋,會出現包含 ß 字元的結果,反之亦然。也就是說,在 utf8_general_ci 下無法分辨 ß 與 s。但如果是 utf8_unicode_ci,s 就是 s,ß 就是 ß,不會傻傻分不清。

因此,如果需要較精確的比對,就要用 utf8_unicode_ci,但搜尋效能就會差了一點。
如果不需要太精確的比對,就可以用 utf8_general_ci,處理速度會快些。

2011/08/23

MySQL 的 Query String 可以有多長?

這個疑惑通常發生在 INSERT 或 WHERE 裡面有用到 IN() 的時候。如果有將圖檔存在資料庫裡(BLOG 欄位),也有可能遇到這個問題。