SELECT *? FROM `user`? WHERE `first_name` = '孟'? LIMIT 0 , 30
竟然會搜出一條 李 的記錄來,上網查了查,原來是大小寫和中文?字符集的問題
原因:
在默認情況下,Mysql的字符集是iso的,這樣出現的第一個問題是,搜索一個漢字的時候,可能搜到其他的詞,原因是前一個漢字的后半個字節和后一個漢字的前半個字節拼接起來正好是你搜的那個字。第二個問題是,Mysql對大小寫并不是敏感的,就是說?A和a是一樣的,孟和李的前一個字節正好是被Mysql認為是大小寫相同的字符,所以搜孟時,會出現李。
解決方案:
1 將mysql的字符集改為gbk
2 將要進行中文搜索的字段加上binary屬性
3 使用Blob