欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談PostgreSQL中大小寫不敏感問題

 更新時間:2021年01月11日 09:08:18   作者:瀚高PG實驗室  
這篇文章主要介紹了淺談PostgreSQL中大小寫不敏感問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

本文主要討論PostgreSQL中大小寫不敏感存在的問題。

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

圖1 Person與person

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

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

此時如果我們再想創(chuàng)建表Person,會得到一個錯誤,因為此時PostgreSQL實際上把表名從Person轉(zhuǎn)換成了person。由于已經(jīng)存在表person,所以會報錯。

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

圖3 創(chuàng)建表Person

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

圖4 獲取表Person中的記錄

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

圖5 刪除操作

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

補充:PostgreSQL大小寫不敏感排序

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

語法:

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

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

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

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

例子:

—正常情況的排序

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

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ū)分大小寫排序

可以看到我們指定collate為zh_CN時便沒有區(qū)分大小寫排序。

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

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

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ū)分大小寫,目前需要citext插件。

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

相關(guān)文章

  • PostgreSQL教程(十七):客戶端命令(1)

    PostgreSQL教程(十七):客戶端命令(1)

    這篇文章主要介紹了PostgreSQL教程(十七):客戶端命令(1),本文講解了createdb、dropdb、reindexdb、vacuumdb、createuser、dropuser等命令,需要的朋友可以參考下
    2015-05-05
  • postgresql 兩表關(guān)聯(lián)更新操作

    postgresql 兩表關(guān)聯(lián)更新操作

    這篇文章主要介紹了postgresql 兩表關(guān)聯(lián)更新操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 如何查看PostgreSQL數(shù)據(jù)庫中所有表

    如何查看PostgreSQL數(shù)據(jù)庫中所有表

    這篇文章主要介紹了如何查看PostgreSQL數(shù)據(jù)庫中所有表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • postgresql 性能參數(shù)配置方式

    postgresql 性能參數(shù)配置方式

    這篇文章主要介紹了postgresql 性能參數(shù)配置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL psql 常用命令總結(jié)

    PostgreSQL psql 常用命令總結(jié)

    psql是PostgreSQL的一個命令行交互式客戶端工具,它具有非常豐富的功能,類似于Oracle的命令行工具sqlplus,本文給大家總結(jié)下PostgreSQL 中常用 psql 常用命令以便后續(xù)查閱,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • PostgreSQL對數(shù)組元素聚合基本方法示例

    PostgreSQL對數(shù)組元素聚合基本方法示例

    這篇文章主要為大家介紹了PostgreSQL對數(shù)組元素聚合基本方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • postgresql數(shù)據(jù)庫使用說明_實現(xiàn)時間范圍查詢

    postgresql數(shù)據(jù)庫使用說明_實現(xiàn)時間范圍查詢

    這篇文章主要介紹了postgresql數(shù)據(jù)庫使用說明_實現(xiàn)時間范圍查詢,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql中的ctid解讀

    postgresql中的ctid解讀

    這篇文章主要介紹了postgresql中的ctid使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • PostgreSql?JDBC事務(wù)操作方法詳解

    PostgreSql?JDBC事務(wù)操作方法詳解

    這篇文章主要為大家介紹了PostgreSql?JDBC事務(wù)操作方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Cenots7 離線安裝部署PostgreSQL 的詳細過程

    Cenots7 離線安裝部署PostgreSQL 的詳細過程

    這篇文章主要介紹了Cenots7 離線安裝部署PostgreSQL 的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10

最新評論