默認情況下,SQL Server不區分大小寫,假設數據表test的name字段中有數據“abcd”和“Abcd”,如果使用查詢語句:select * from test where name like 'a%',則查詢的結果會把上面的兩條數據都查詢出來,這一點上和Oracle有區別.
可以通過設置排序規則使其區分大小寫,分別為:創建數據庫,修改數據庫,創建表的字符型列時指定排序規則來實現
eg:
1.創建數據庫區分大小寫
create database test collate Chinese_PRC_CS_AS
2.修改數據庫區分大小寫
alter database test collate Chinese_PRC_CS_AS
3.創建表區分大小寫
create table test(tid in primary key, name varchar(20 collate Chinese_PRC_CS_AS))
大部分數據庫在進行字符串比較的時候,對大小寫是不敏感的,但是,在SQLite中,對大小寫是敏感的。
有表test如下:
id | name |
1 | ABCDE |
2 | abcde |
3 | ABcde |
4 | abCDE |
5 | aaaaa |
6 | bbbbb |
執行下面sql語句
select * from test where name = 'abCDE';
結果是沒有查詢到任何記錄(sqlite在進行字符串查詢的時候,默認是區分大小寫)
區分大小寫的三種解決方案
一:使用大小寫轉換函數LOWER,UPPER
eg:select * from test where LOWER(name) = 'abcde';
二:在進行比較時強制聲明不區分大小寫
select * from test where name = 'abcde' collate nocase;
三:創建表時聲明該字段不區分大小寫
create table test (id integer, name text collate nocase)
注:
(1)不推薦使用方案一,有額外的性能消耗
(2)如果只是少量查詢不需要區分大小寫,建議使用方案二
(3)在任何情況下都不需要區分大小寫,方案三完美獻身