1. 程式人生 > >sqlite查詢問題,由字母大小寫敏感引起

sqlite查詢問題,由字母大小寫敏感引起

create 查詢語句 img bsp collate c++ 小寫字母 用戶 not null

目前做的項目之前是用mysql,這是個錯誤的選擇,因為本身並不是服務器-客戶端模式的項目,而是一個CS架構項目,mysql這種需要較繁復配置的數據庫並不合適。需要的應該是sqlite這類,內嵌的數據庫。

所以最近統一做數據庫替換工作,將之前mysql數據庫操作的所有接口統一改成sqlite數據庫操作的接口。

按道理講sql語句都是一樣的,只要改下調用的數據庫C++接口就可以了。

然後就出現一個問題,一個表的查詢一直是錯的。

經過調試和實驗發現,查詢語句中用戶ID都是大寫字母,實際數據庫中含有小寫字母。

技術分享圖片

查詢為空因為這串user_id ‘F56DC7AD-2AAB-499C-A1A5-0EFC154E15E2‘ 都是大寫字母。

實際上:

技術分享圖片

user_id為:F56DC7AD-2AAB-499c-A1A5-0EFC154E15E2,含有小寫字母

為什麽之前在mysql中沒有這樣的問題呢?

因為在mysql中查詢對字母大小寫不敏感:

技術分享圖片

可以看出,即使f這個字母大小寫不一致,還是成功查到了

最後我解決這個問題方法就是,讓原本大小寫敏感的sqlite變成大小寫不敏感,這樣就與之前的mysql保持一致。

建表時:

CREATE TABLE if not exists user_cert (user_id char(128) NOT NULL COLLATE NOCASE,cert_id char(128) NOT NULL,id integer primary key autoincrement);

特表規定 COLLATE NOCASE就可以了。

sqlite查詢問題,由字母大小寫敏感引起