最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

sqlserver、mysql、oracle、pgsql、sqlite五大關(guān)系數(shù)據(jù)庫(kù)的對(duì)象名稱和轉(zhuǎn)義字符

 更新時(shí)間:2025年11月12日 11:41:36   作者:jackletter  
這篇文章主要介紹了sqlserver、mysql、oracle、pgsql、sqlite五大關(guān)系數(shù)據(jù)庫(kù)的對(duì)象名稱和轉(zhuǎn)義字符的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用數(shù)據(jù)庫(kù)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、轉(zhuǎn)義符

一般我們?cè)诔绦蛑惺褂梅葱备茏鳛檗D(zhuǎn)義符,如下 c# 代碼:

那么在sql中是不是也同樣的規(guī)則呢?

在 SQL 標(biāo)準(zhǔn) (ANSI SQL) 里:

  • 字符串常量使用單引號(hào)包裹,如果字符串本身有單引號(hào)則用兩個(gè)單引號(hào)表示
  • 反斜杠 \ 不是轉(zhuǎn)義字符

    我們甚至能在單引號(hào)里換行

那么講完標(biāo)準(zhǔn)了,就看各個(gè)數(shù)據(jù)庫(kù)的支持情況了:

1.1 oracle

支持

1.2 sqlserver

支持

1.3 postgresql

支持

1.4 sqlite

支持

1.5 mysql

默認(rèn)不支持

如果我們開啟 NO_BACKSLASH_ESCAPES 就能和sql標(biāo)準(zhǔn)一致了,如:

二、對(duì)象名稱引用符

2.1 oracle

規(guī)則:

  • 只能用雙引號(hào)包裹對(duì)象名并且對(duì)象名本身不能含有雙引號(hào)
  • 雙引號(hào)內(nèi)反斜杠不是轉(zhuǎn)義字符
  • 雙引號(hào)內(nèi)不接受換行(但接受制表符)

實(shí)例:

create table "test"(id int) -- 正常 test

create table "te\r\nst"(id int) -- te\r\nst
create table "te
st"(id int) 					   -- error 不能有換行符

CREATE TABLE "te""st123" (id INT); -- error 即使兩個(gè)雙引號(hào)也不行

2.2 postgresql

規(guī)則:

  • 只能用雙引號(hào)包裹對(duì)象名,如果對(duì)象名本身有雙引號(hào),那么用兩個(gè)代表一個(gè)
  • 雙引號(hào)內(nèi)反斜杠不是轉(zhuǎn)義字符(普通的字符串都不是,更何況對(duì)象名)
  • 雙引號(hào)內(nèi)接受換行符、制表符等

實(shí)例:

create table "test"(id int,name varchar(50)) -- 正常 test

create table "te
ok
st"(id int,name varchar(50)) -- te換行符ok換行符st

create table "te\t\r\nst"(id int,name varchar(50)) -- te\t\r\nst

create table "te""ok"(id int) -- 兩個(gè)雙引號(hào)表示一個(gè) te"ok

2.3 sqlserver

規(guī)則:接受雙引號(hào)和中括號(hào)包裹對(duì)象名

  • 當(dāng)使用雙引號(hào)包裹對(duì)象名時(shí):規(guī)則和postgresql一致

  • 當(dāng)使用中括號(hào)包裹對(duì)象名時(shí):

    • 外層中括號(hào)內(nèi)除了右中括號(hào)都是普通字符(包括換行、制表、反斜杠等),直到遇到右中括號(hào)
    • 如果對(duì)象名本身含有左中括號(hào),則直接寫就行(被包含在了上一行的規(guī)則內(nèi))
    • 如果對(duì)象名本身含有右中括號(hào),那么要用兩個(gè)右中括號(hào)表示一個(gè)

實(shí)例:

-- 正常情況
create table [test](id int) -- test

-- 換行符會(huì)當(dāng)成表名的一部分, 建好表后在ssms中完全看不出來, 只能用過下面的查詢驗(yàn)證
create table [test
ok](id int) -- test換行符ok
select * from [test
ok]

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 第二個(gè)認(rèn)為是表名一部分, 最后一個(gè)認(rèn)為是邊界
create table [[test123](id int) -- [test123

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 第二、三個(gè)認(rèn)為是表名的一部分, 最后一個(gè)認(rèn)為是邊界
create table [[[test456](id int) -- [[test456

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 第二、三、四個(gè)認(rèn)為是表名的一部分, 最后一個(gè)認(rèn)為是邊界
create table [[[[test789](id int) -- [[[test789

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 '[' 認(rèn)為是表名一部分, 最后一個(gè)認(rèn)為是邊界
create table [te[st012](id int) -- te[st012

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的兩個(gè) '[' 認(rèn)為是表名一部分, 最后一個(gè)認(rèn)為是邊界
create table [te[[st159](id int) -- te[[st159

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 ']' 認(rèn)為是結(jié)束邊界, 所以報(bào)錯(cuò)
create table [te]st](id int) -- error

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 ']]' 被當(dāng)做一個(gè) ']' 是表名一部分,最后一個(gè)認(rèn)為是邊界 
create table [te]]st247](id int) -- te]st247

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 ']]' 被當(dāng)做一個(gè) ']' 是表名一部分,又緊接著出現(xiàn)的 ']' 認(rèn)為是結(jié)束邊界, 所以報(bào)錯(cuò)
create table [te]]]st](id int) -- error

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 ']]]]' 被當(dāng)做 ']]' 是表名一部分,最后一個(gè)認(rèn)為是邊界 
create table [te]]]]st358](id int) -- te]]st358

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 中間的 ']]]]' 被當(dāng)做 ']]' 是表名一部分,又緊接著出現(xiàn)的 ']' 認(rèn)為是結(jié)束邊界, 所以報(bào)錯(cuò)
create table [te]]]]]st](id int) -- error

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 后面的 ']]' 被當(dāng)做 ']' 是表名一部分,沒有結(jié)束邊界, 所以報(bào)錯(cuò)
create table [test]](id int) -- error

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 后面的 ']]' 被當(dāng)做 ']' 是表名一部分,最后一個(gè)認(rèn)為是邊界 
create table [test2468]]](id int) -- test2468]

-- 左側(cè)第一個(gè) '[' 認(rèn)為是邊界, 后面的 '[[[' 被當(dāng)做 '[[[' 是表名一部分,后面的 ']]]]' 被當(dāng)做 ']]' 是表名一部分, 最后一個(gè)是邊界
create table [[[[test3579]]]]](id int) -- [[[test3579]]

2.4 mysql

規(guī)則:默認(rèn)僅接受反引號(hào)包裹對(duì)象名

  • 用雙引號(hào)包裹對(duì)象名,如果對(duì)象名本身有雙引號(hào),那么用兩個(gè)代表一個(gè)
  • 雙引號(hào)內(nèi)反斜杠不是轉(zhuǎn)義字符
  • 雙引號(hào)內(nèi)接受換行符、制表符等-

實(shí)例:

-- 正常情況
create table `test`(id int) -- test

create table `te\t\r\nst123`(id int) -- te\t\r\nst123
select * from `te\t\r\nst123`

-- 換行符會(huì)當(dāng)成表名的一部分, 建好表后在 dbeaver 中完全看不出來, 只能用過下面的查詢驗(yàn)證
create table `test
ok`(id int) -- test換行符ok
select * from `test
ok`

-- 第一個(gè) '`' 是開始分割邊界, 緊接著又一個(gè) '`' 則認(rèn)為是雙 '`' 的第一個(gè), 但沒有又緊跟一個(gè) '`' 報(bào)錯(cuò)
create table ``test`(id int) -- error

-- 第一個(gè) '`' 是開始分割邊界, 緊接著 '``' 被合并認(rèn)為普通表名的 '`', 最后一個(gè) '`' 結(jié)束分割邊界
create table ```test123`(id int) -- `test123

-- 第一個(gè) '`' 是開始分割邊界, 結(jié)尾的 '``' 被合并認(rèn)為普通表名的 '`', 這樣就沒有結(jié)束邊界, 報(bào)錯(cuò)
create table `test``(id int) -- error

-- 第一個(gè) '`' 是開始分割邊界, 結(jié)尾的 '``' 被合并認(rèn)為普通表名的 '`', 后面又跟了一個(gè) '`' 結(jié)束分割邊界
create table `test456```(id int) -- test456`

-- 第一個(gè) '`' 是開始分割邊界, 中間的 '`' 被認(rèn)為是結(jié)束分割邊界, 后面還有 就報(bào)錯(cuò)了
create table `test`ok`(id int) -- error

當(dāng)mysql開啟 ANSI_QUOTES 時(shí),可以使用雙引號(hào),規(guī)則和 postgresql 一致

create table "t_user"(id int) -- 正常
create table "t\r\n_user123"(id int) -- 反斜杠不是轉(zhuǎn)義符
create table "t""_user456"(id int) -- 兩個(gè)雙引號(hào)表示一個(gè)
create table "t
78_user456"(id int) -- 接受直接換行符

show tables

注意:mysql無論是用雙引號(hào)還是反引號(hào)包裹對(duì)象名,內(nèi)部反斜杠都不是轉(zhuǎn)義符,這和 NO_BACKSLASH_ESCAPES 沒關(guān)系

2.5 sqlite

規(guī)則:可以接受雙引號(hào)、反引號(hào)、中括號(hào)三種形式包裹對(duì)象名,但推薦雙引號(hào)

  • 當(dāng)是雙引號(hào)的時(shí)候和 postgresql 保持一致
  • 當(dāng)是反引號(hào)的時(shí)候和mysql保持一致
  • 當(dāng)是中括號(hào)的時(shí)候,除了對(duì)象名本身不能有右中括號(hào)外,和sqlserver一致

    sqlite這個(gè)比較特殊,看著像是兼容sqlserver,但實(shí)際解析有問題:
    如sql:create table [te]]st](id int,name varchar(50)) -- error 這在sqlsever中能正常執(zhí)行

三、對(duì)象名稱分幾段

3.1 sqlserver

最多四段,如:[linked_db].[dbname].[schema].[table]

3.2 mysql

最多兩段,如: dbname.table 也可以稱為 schema.table

因?yàn)?,mysql中沒有像sqlserver那樣額外的schema概念

3.3 postgresql

最多兩段,如:"schema"."table"

postgresql中不能跨庫(kù)查詢,所以只能到schema,這個(gè)schema和sqlserver中的類似

3.4 sqlite

最多兩段,如:"dbname"."table",但更常見的是一段,很少有兩段的情況

因?yàn)閟qlite是嵌入式的單文件,所以一般操作都在這個(gè)文件內(nèi)都是一段,

但可以通過 attach 將另外幾個(gè)文件附加進(jìn)來,這樣訪問附件進(jìn)來的數(shù)據(jù)就是兩段了

3.5 oracle

最多有三段,如:"schema"."table"@dblink, 且最后一個(gè) dblink 不能用雙引號(hào)括起來

總結(jié)

到此這篇關(guān)于sqlserver、mysql、oracle、pgsql、sqlite五大關(guān)系數(shù)據(jù)庫(kù)的對(duì)象名稱和轉(zhuǎn)義字符的文章就介紹到這了,更多相關(guān)關(guān)系數(shù)據(jù)庫(kù)對(duì)象名稱和轉(zhuǎn)義字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Centos5.5中安裝Mysql5.5過程分享

    Centos5.5中安裝Mysql5.5過程分享

    這篇文章主要介紹了Centos5.5中安裝Mysql5.5過程分享,本文使用編譯方法安裝MySQL,并給出了一些可能遇到的錯(cuò)誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • sql語句示例之case?when作為where條件

    sql語句示例之case?when作為where條件

    這篇文章主要給大家介紹了關(guān)于sql語句示例之case?when作為where條件的相關(guān)資料,在SQL語句中CASE WHEN子句是根據(jù)條件表達(dá)式的結(jié)果來執(zhí)行不同的邏輯操作,它使用在WHERE子句中,以根據(jù)特定的條件在查詢結(jié)果中過濾數(shù)據(jù),需要的朋友可以參考下
    2023-08-08
  • mac系統(tǒng)下mysql 8.0.11 安裝指南

    mac系統(tǒng)下mysql 8.0.11 安裝指南

    這篇文章主要為大家詳細(xì)介紹了mac系統(tǒng)下mysql 8.0.11 安裝指南,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • MySQL8.0?Command?Line?Client輸入密碼后出現(xiàn)閃退現(xiàn)象的原因以及解決方法總結(jié)

    MySQL8.0?Command?Line?Client輸入密碼后出現(xiàn)閃退現(xiàn)象的原因以及解決方法總結(jié)

    我們?cè)诎惭bMYSQL數(shù)據(jù)庫(kù)時(shí),經(jīng)常會(huì)出現(xiàn)一些問題,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0?Command?Line?Client輸入密碼后出現(xiàn)閃退現(xiàn)象的原因以及解決方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • MySQL自動(dòng)安裝批處理腳本實(shí)例代碼

    MySQL自動(dòng)安裝批處理腳本實(shí)例代碼

    為了日后安裝數(shù)據(jù)庫(kù)方便,下面這篇文章主要給大家介紹了關(guān)于MySQL自動(dòng)安裝批處理腳本的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • mysql安裝navicat之后,出現(xiàn)2059,Authentication plugin及本地鏈接虛擬機(jī)docker,遠(yuǎn)程鏈接服務(wù)器

    mysql安裝navicat之后,出現(xiàn)2059,Authentication plugin及本地鏈接虛擬機(jī)docker,

    這篇文章主要介紹了mysql安裝navicat之后,出現(xiàn)2059,Authentication plugin及本地鏈接虛擬機(jī)docker,遠(yuǎn)程鏈接服務(wù)器,需要的朋友可以參考下
    2020-06-06
  • MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫(kù)名稱方法示例

    MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫(kù)名稱方法示例

    這篇文章主要給大家介紹了MySQL創(chuàng)建帶特殊字符的數(shù)據(jù)庫(kù)名稱方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • MySQL進(jìn)階SELECT語法篇

    MySQL進(jìn)階SELECT語法篇

    從這個(gè)基本語法可以看出,最簡(jiǎn)單的SELECT語句是SELECT select_list,實(shí)際上利用這個(gè)最簡(jiǎn)單的SELECT語句,你也可以完成許多你期待的功能,首先你能利用它進(jìn)行MySQL所支持的任何運(yùn)算,例如:SELECT 1+1,它將返回2;其次,你也能利用它給變量賦值,而在PHP中,運(yùn)用SELECT語句的這種功能,你就可以自由地運(yùn)用MySQL的函數(shù)為PHP程序進(jìn)行各種運(yùn)算,并賦值給變量。在很多的時(shí)候,你會(huì)發(fā)現(xiàn)MySQL擁有許多比PHP更為功能強(qiáng)大的函數(shù)。
    2008-04-04
  • MySQL敏感數(shù)據(jù)加密的實(shí)現(xiàn)方案

    MySQL敏感數(shù)據(jù)加密的實(shí)現(xiàn)方案

    這篇文章主要介紹了MySQL敏感數(shù)據(jù)加密的實(shí)現(xiàn)方案,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2024-02-02
  • MySQL中查詢json格式的字段實(shí)例詳解

    MySQL中查詢json格式的字段實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中查詢json格式字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

广西| 潮州市| 吕梁市| 蕉岭县| 鲁山县| 临海市| 静乐县| 紫阳县| 海盐县| 新野县| 云梦县| 子洲县| 长子县| 大安市| 栖霞市| 甘洛县| 崇左市| 宁远县| 双桥区| 珠海市| 闽侯县| 贵溪市| 祁东县| 荔浦县| 临澧县| 阿克陶县| 南陵县| 根河市| 阿鲁科尔沁旗| 聂拉木县| 西昌市| 文成县| 平乡县| 峨眉山市| 阳谷县| 南昌市| 海伦市| 那曲县| 吉水县| 永胜县| 克东县|