溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL 與大小寫的坑是什么

發(fā)布時(shí)間:2022-01-04 09:57:50 來源:億速云 閱讀:170 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)PostgreSQL 與大小寫的坑是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

其實(shí)每種數(shù)據(jù)庫都有自己的特色,PostgreSQL 也不例外,其中如果你留心PostgreSQL被最常問及的問題之一,就是大小寫的問題。今天的討論不涉及數(shù)據(jù)庫名,表名的大小寫,僅僅討論一下字段里面的值的大小寫。

我們以一個(gè)例子為開始,

1 我們創(chuàng)建一個(gè)表

create table Case_insensitive

( id serial not null primary key, 

address varchar(50), 

comment text);

2 將數(shù)據(jù)庫輸入到里面

insert into case_insensitive (address,comment) values ('Person1@em.com','Thanks for your help!!');

insert into case_insensitive (address,comment) values ('TaTk@bb.com','I hate it');

insert into case_insensitive (address,comment) values ('ttKbb@cc.com','Sorry I am understanding now, little slowly');

PostgreSQL 與大小寫的坑是什么

那么大小寫的問題在哪里?我們來查詢一個(gè)數(shù)據(jù)大致你就會(huì)理解

PostgreSQL 與大小寫的坑是什么

從圖中你可以清晰的看到,發(fā)生的問題在哪里,如果你的字段里面的值是包含英文大小寫的情況下,你必須是要進(jìn)行細(xì)致一致的大小寫匹配才能找到相關(guān)的值。

而按照中國的人的思維方式,或者說用慣了其他主流數(shù)據(jù)庫的情況下這樣的必須匹配性的輸入對(duì)中國人來說,是不友好的。

雖然題目中提到了"坑", 但實(shí)際上來說,這不是一個(gè)坑,或者嚴(yán)謹(jǐn)?shù)膩碚f,PostgreSQL這樣的方式才應(yīng)該是正確的。而很多時(shí)候先入為主,來判斷POSTGRESQL 在這方面是有坑的,這并不公平。

那如何來解決這個(gè)世俗認(rèn)為postgresql 應(yīng)該和其他數(shù)據(jù)庫一樣使用習(xí)慣的方式問題。下面就要來說一說。

方法:1

統(tǒng)一規(guī)則:

我們將我們查詢的字段,和需要查詢的數(shù)據(jù)統(tǒng)一變成小寫,通過 lower 這個(gè)函數(shù)來進(jìn)行統(tǒng)一的轉(zhuǎn)換。

PostgreSQL 與大小寫的坑是什么

從上圖可以看出,我們可以將數(shù)據(jù)在輸入純小寫的情況下,將數(shù)據(jù)查出。

問題又來了,這樣的情況下能走索引嗎?

PostgreSQL 與大小寫的坑是什么

答案是當(dāng)然不能,函數(shù)的計(jì)算在條件左邊的情況下大部分?jǐn)?shù)據(jù)庫都是不能走索引的,oracle 當(dāng)然有類似的功能,能讓一部分這樣的情況走索引。PG 可以嗎,當(dāng)然,對(duì)標(biāo)的就是ORACLE ,當(dāng)然也可以當(dāng)函數(shù)計(jì)算在左邊的情況下,繼續(xù)走索引。

怎么做???

變換思路,我們將索引的里面的字符都變小就可以了,看下圖。

當(dāng)然后面執(zhí)行計(jì)劃還未走索引得原因是數(shù)據(jù)量只有三條,不足以支撐走索引的cost.

PostgreSQL 與大小寫的坑是什么

那處理這樣情況的方法到此為止了?  no no no  我們還有其他的方法供您選擇。

2  有一種情況是,這一列例如是郵件地址,如果是郵件地址的情況下,是具有一種性質(zhì)的,就是數(shù)據(jù)的唯一性。那如果 (請(qǐng)看圖)

PostgreSQL 與大小寫的坑是什么

如果出現(xiàn)圖中的情況,這可是不大美好的一件事情。如何來進(jìn)行郵件地址的唯一性檢查。我們可以提前為這列,建立一個(gè)唯一索引。

PostgreSQL 與大小寫的坑是什么

有了這樣的索引大小寫不一致的情況輸入同樣的字符就可以被管制了

PostgreSQL 與大小寫的坑是什么

當(dāng)然如果這些你還有疑問,看看是不是還有其他的方法來對(duì)這樣的事情進(jìn)行處理。回答是YES

3  使用ilike

PostgreSQL 與大小寫的坑是什么

通過使用ilike的查詢方式來查詢大小寫敏感的問題。

其實(shí)如果有規(guī)劃的情況下,可以通過在輸入時(shí)候的大小寫輸入的轉(zhuǎn)換在insert 這個(gè)階段就將問題處理清楚,并且輔助于一些約束。這樣問題就比較好解決。

上述就是小編為大家分享的PostgreSQL 與大小寫的坑是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI