校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > 淺談PostgreSQL中大小寫(xiě)不敏感問(wèn)題

淺談PostgreSQL中大小寫(xiě)不敏感問(wèn)題

熱門(mén)標(biāo)簽:漯河外呼電話系統(tǒng) 外呼調(diào)研系統(tǒng) 辦公外呼電話系統(tǒng) 重慶自動(dòng)外呼系統(tǒng)定制 美容工作室地圖標(biāo)注 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 地圖標(biāo)注和圖片名稱的區(qū)別 海豐有多少商家沒(méi)有地圖標(biāo)注 打電話智能電銷(xiāo)機(jī)器人授權(quán)

本文主要討論P(yáng)ostgreSQL中大小寫(xiě)不敏感存在的問(wèn)題。

默認(rèn)情況下,PostgreSQL會(huì)將列名和表名全部轉(zhuǎn)換為小寫(xiě)狀態(tài)。

圖1 Person與person

如圖1所示,我們創(chuàng)建表person,其中包含name列。然后插入一條記錄。執(zhí)行SELECT查詢時(shí),使用列名Name和表名Person而不是name和person,發(fā)現(xiàn)仍然可以正常獲取剛剛插入表person中的記錄。

圖2 創(chuàng)建表Person?

此時(shí)如果我們?cè)傧雱?chuàng)建表Person,會(huì)得到一個(gè)錯(cuò)誤,因?yàn)榇藭r(shí)PostgreSQL實(shí)際上把表名從Person轉(zhuǎn)換成了person。由于已經(jīng)存在表person,所以會(huì)報(bào)錯(cuò)。

通常情況下,這種大小寫(xiě)不敏感是很方便的,但是當(dāng)我們想創(chuàng)建大小寫(xiě)敏感的表名和列名(需要使用雙引號(hào))時(shí),會(huì)產(chǎn)生一些問(wèn)題。

圖3 創(chuàng)建表Person

如圖3所示,我們成功創(chuàng)建了表Person,并插入了一條記錄,此條記錄和插入person中的不同以示區(qū)分。再次使用SELECT查詢,并且使用表名Person和列名Name,但是返回的結(jié)果卻是person中的記錄。這還是因?yàn)镻ostgreSQL將Person轉(zhuǎn)換成了person。所以想要正確查詢,需要使用“Person”和“Name”(如圖4所示)。

圖4 獲取表Person中的記錄

此時(shí)查看數(shù)據(jù)庫(kù)中的表(見(jiàn)圖5),可以發(fā)現(xiàn)Person和person這兩個(gè)表都在數(shù)據(jù)庫(kù)中。如果我們使用DROP TABLE Person,刪除的仍然是表person。

圖5 刪除操作

綜上所述,當(dāng)創(chuàng)建表或者寫(xiě)SQL查詢語(yǔ)句時(shí),建議避免使用雙引號(hào)。

補(bǔ)充:PostgreSQL大小寫(xiě)不敏感排序

pg12開(kāi)始支持不區(qū)分大小寫(xiě),或者區(qū)分大小寫(xiě)的排序的collate。

語(yǔ)法:

CREATE COLLATION [ IF NOT EXISTS ] name (
  [ LOCALE = locale, ]
  [ LC_COLLATE = lc_collate, ]
  [ LC_CTYPE = lc_ctype, ]
  [ PROVIDER = provider, ]
  [ DETERMINISTIC = boolean, ]
  [ VERSION = version ]
)
CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation

其中兩個(gè)關(guān)鍵參數(shù):

PROVIDER:指定用于與此排序規(guī)則相關(guān)的區(qū)域服務(wù)的提供程序。可能的值是: icu、libc。 默認(rèn) 是libc。但若要設(shè)置大小寫(xiě)不敏感,目前只支持icu。

DETERMINISTIC:設(shè)置成not deterministic表示大小寫(xiě)不敏感。

例子:

—正常情況的排序

我們可以看到,正常的order by會(huì)區(qū)分大小寫(xiě)。

bill@bill=>create table test (c1 text); 
CREATE TABLE
bill@bill=>insert into test values ('a'),('b'),('c'),('A'),('B'),('C'); 
INSERT 0 6
bill@bill=>select * from test order by c1;
 c1 
----
 A
 B
 C
 a
 b
 c
(6 rows)

同樣,在oracle中也是一樣:

SQL> select * from test order by c1;

C1
--------------------------------------------------------------------------------
A
B
C
a
b
c

6 rows selected.

—不區(qū)分大小寫(xiě)排序

可以看到我們指定collate為zh_CN時(shí)便沒(méi)有區(qū)分大小寫(xiě)排序。

bill@bill=>select * from test order by c1 collate "zh_CN"; 
 c1 
----
 a
 A
 b
 B
 c
 C
(6 rows)

我們也可以自定義collation支持不區(qū)分大小寫(xiě)的排序,但是需要注意在編譯數(shù)據(jù)庫(kù)的時(shí)候加上 —with-icu才可以,否則會(huì)出現(xiàn)報(bào)錯(cuò):

bill@bill=>CREATE COLLATION case_insensitive (provider = icu, locale = 'zh_Hans', deterministic = false);
ERROR: ICU is not supported in this build
HINT: You need to rebuild PostgreSQL using --with-icu.

正常情況:

bill@bill=> CREATE COLLATION case_insensitive (provider = icu, locale = 'zh_Hans', deterministic = false); 
CREATE COLLATION 
bill@bill=> select * from test order by c1 collate "case_insensitive"; 
 c1  
---- 
 a 
 A 
 b 
 B 
 c 
 C 
(6 rows)

目前collate不支持=操作不區(qū)分大小寫(xiě),目前需要citext插件。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL LIKE 大小寫(xiě)實(shí)例
  • Postgresql 數(shù)據(jù)庫(kù)轉(zhuǎn)義字符操作
  • postgresql~*符號(hào)的含義及用法說(shuō)明
  • postgresql數(shù)據(jù)庫(kù)使用說(shuō)明_實(shí)現(xiàn)時(shí)間范圍查詢
  • postgresql 實(shí)現(xiàn)將數(shù)組變?yōu)樾?/li>
  • 基于PostgreSql 別名區(qū)分大小寫(xiě)的問(wèn)題

標(biāo)簽:來(lái)賓 株洲 錦州 晉城 烏海 衡陽(yáng) 珠海 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談PostgreSQL中大小寫(xiě)不敏感問(wèn)題》,本文關(guān)鍵詞  淺談,PostgreSQL,中,大小寫(xiě),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談PostgreSQL中大小寫(xiě)不敏感問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺談PostgreSQL中大小寫(xiě)不敏感問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 玛纳斯县| 武义县| 赤城县| 柘荣县| 定日县| 铜陵市| 石门县| 松桃| 长泰县| 安平县| 山西省| 尖扎县| 紫阳县| 德格县| 资兴市| 赤水市| 渝北区| 定远县| 宜兰市| 海伦市| 错那县| 上林县| 斗六市| 都兰县| 民乐县| 新闻| 杭州市| 桦川县| 呼和浩特市| 三亚市| 聂拉木县| 彰化市| 宜章县| 崇明县| 枣庄市| 广河县| 静海县| 嵊泗县| 霍州市| 杭州市| 商城县|