MYSQL字串大小寫 預設行為
來源:互聯網
上載者:User
今天遇到一個主鍵衝突的檔案, 我看兩條記錄的主鍵明明不一樣, 一條是大寫的JAA, 另外一條是小寫jaa, 莫灰是mysql對欄位的值不區分大小寫, 在網上查了一下, 還真是(預設情況下), 找了一篇文章: 摘自: http://www.oklinux.cn/html/sql/other/20080426/52340.html1、Linux下mysql安裝完後是預設:區分表名的大小寫,不區分列名的大小寫;
2、用root帳號登入後,在/etc/my.cnf 中的[mysqld]後添加添加lower_case_table_names=1,重啟MYSQL服務,這時已設定成功:不區分表名的大小寫;lower_case_table_names參數詳解:
lower_case_table_names = 0
其中 0:區分大小寫,1:不區分大小寫MySQL在Linux下資料庫名、表名、列名、別名大小寫規則是這樣的:
1、資料庫名與表名是嚴格區分大小寫;
2、表的別名是嚴格區分大小寫;
3、列名與列的別名在所有的情況下均是忽略大小寫;
4、變數名也是嚴格區分大小寫;MySQL在Windows下都不區分大小寫。3、如果想在查詢時區分欄位值的大小寫,則:欄位值需要設定BINARY屬性,設定的方法有多種:
A、建立時設定:
CREATE TABLE T(
A VARCHAR(10) BINARY
);B、使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;C、mysql table editor中直接勾選BINARY項。 摘自:http://zhangzuanqian.javaeye.com/blog/210456MySQL查詢字串時大小寫不敏感
最近反映如果註冊了阿龍。阿磊就不能註冊的問題!這個是mysql問題!很多用mysql的論壇都有這個問題。而且不僅僅是這兩個詞的問題。 出現這個問題的原因是:MySQL在查詢字串時是大小寫不敏感的,在編繹MySQL時一般以ISO-8859字元集作為預設的字元集,這個字元集對大小寫不敏感,因此在比較過程中中文編碼字元大小寫轉換造成了這種現象。 方法一:
解決方案是對於包含中文的欄位加上"binary"屬性,使之作為二進位比較,例如將"name char(10)"改成"name char(10)binary"。 方法二:
如果你使用源碼編譯MySQL,可以編譯MySQL時使用--with--charset=gbk 參數,這樣MySQL就會直接支援中文尋找和排序了。 方法三:
可以使用 Mysql 的 locate 函數來判斷。以上述問題為例,使用方法為: SELECT * FROM table WHERE locate(field,'李') > 0; 方法四:
把您的Select語句改成這樣,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY '%FIND%'即可! 方法五:
如果你在Windows下使用已經編譯好的MySQL,可以修改My.ini中的字元集選項。
default-character-set = gb2312 在預設情況下,mysql搜尋不區分大小寫(但某些字元集始終區分大小寫,如czech)。這意味著,如果你使用col_name LIKE 'a%'進行搜尋,你將獲得以A或a開始的所有列。 如果打算使搜尋區分大小寫,請確保運算元之一具有區分大小寫或二進位校對。例如,如果你正在比較均適用latin1字元集的列和字串,可使用COLLATE操作符,使1個運算元具有latin1_general_cs或latin1_bin校對特性。例如:
col_name COLLATE latin1_general_cs LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE 'a%'
col_name LIKE 'a%' COLLATE latin1_bin 如果希望總是以區分大小寫方式處理列,可使用區分大小寫或二進位校對聲明它。建表時候使用BINARY標示。
CREATE TABLE T(
A VARCHAR(10) BINARY
); 如果是自己的伺服器使用win系統,方法五是最好的方法!如果是linux系統,可以使用方法二!如果不是自己的機子,可以使用方法一,這樣你的使用者名稱是嚴格區分大小寫!