今天又遇到相同的問題,解法有很多種,可以從 SQL 下手,也可以在 table schema 就先做好設定。
SQL 強制區分大小寫
假設原本的 SQL 為:
SELECT * FROM users WHERE name = ‘john’ ;
這樣會撈出「John」、「john」等結果。那麼可以要求 MySQL 使用 binary 的辨識方法去做搜尋:
SELECT * FROM users WHERE binary name = 'johhn';
這樣一來,查詢時 name 欄位就會區分大小寫來做查詢。
修改 table schema
如果在設計 table 時,就確定查詢一定要區分大小寫時,可以在 create table 就先將欄位設定好:
CREATE TABLE users (
name varchar(100) binary
)
這樣之後下 query 時,只要遇到 name 欄位,就自動會區分大小寫。
修改 collation type
一般常用的 collation 是「utf8_general_ci」,該 collation 最後面的「ci」其實是「Case Insensitive」的意思,也就是不區分大小寫。
如果要讓該 table 的所有欄位都區分大小寫,可以將 collation 的 postfix 改為「cs」或是「bin」,例如:
CREATE TABLE user (
name varchar(100)
) COLLATE utf8_general_bin ;
以上三個區分大小寫的方法 scope 差異頗大的,可以挑比較適合當下情況的方法來使用。