SQLite在字串比較中的大小寫問題 zz

2021-09-05 23:29:49 字數 885 閱讀 7110

大部分資料庫在進行字串比較的時候,對大小寫是不敏感的。但是,最近使用sqlite的時候,卻發現它的情況恰好相反。

假設表user的結構和值如下:

username

1user1

執行下面的sql語句:

select * from [user] where username = 'user1'

結果是沒有找到任何記錄。明顯地,sqlite在進行字串比較的時候,預設對大小寫是敏感的。這會對應用程式造成不良的影響。比如,使用者在輸入使用者名稱的時候必須嚴格按照大小寫輸入,這是一種很不好的使用者體驗;使用者表中可能同時存在 user 和 user 兩個使用者,容易造成混淆。

由於sqlite是近年來才興起的資料庫,中文資料少得很。google了一些英文資料,終於找到了三種解決方案:

方案一:使用大小寫轉換函式lower、upper

select * from [user] wherelower(username)= 'user1'

方案二:在進行比較時強制宣告不區分大小寫

select * from [user] where username = 'user1'collate nocase

方案三:建立表時宣告該字段不區分大小寫

create table [user] ( [username] nvarchar(20)collate nocase);

如果在任何情況下都不需要對大小寫敏感,方案三是最好的解決方案;如果只是少量查詢對大小寫不敏感,可以用方案二。而方案一由於用到了函式,可能有額外的效能損失,不推薦使用。

在JAVA中的字串比較

在網上隨處可以找到比較字元的例子,簡單舉個 string str i am a girl if str.compareto i am a girl 0 system.out.println str match if str.equals i am a girl system.out.println ...

Linux shell中字串的比較

我想在shell中完成如下的動作 var1 abcd var2 ef,那麼按照c語言 var2大於var1了,可是我看到shell中好象只能檢測這兩個字串是否匹配 而不能比較大小啊 好像是不能比較大小。如果用變通的方式呢,似乎可考慮用sort等命令來組合。麻煩點兒。if var1 echo var1...

sqlite字串拼接

select path from t category where depth 0 and type 0 用 拼接字串 比如path是 1001 的話 那結果就是 1001 數字相加 select a b 結果為0 select a 1 結果為1 select a 1 結果為1 select 2 1...