PostgreSQL 中的單引號與雙引號用法說明
在pg中的sql,單引號用來標(biāo)識實(shí)際的值,雙引號用來標(biāo)識表名(table name)或列名(column name)等數(shù)據(jù)庫中存在的值。
如,執(zhí)行一句query:
select "name" from "students" where "id"='1'
加上引號的好處在于,當(dāng)在程序中進(jìn)行sql拼裝的時(shí)候,可以簡化對值的校驗(yàn),同時(shí)又可以避免sql注入。即在數(shù)據(jù)庫層面完成了事故的避免。
如,同樣執(zhí)行的query:
select ";drop table students;" from "students" where "id"='1'
由于被引號框起來,pg只會認(rèn)為“;”也是列名的一部分,而不會將語句切斷,從而順利避免了事故。
補(bǔ)充:PostgreSQL 和 MySQL 關(guān)于單引號、雙引號、反單引號的區(qū)別
解決方案寫在前面:
MySQL 可以使用單引號(')或者雙引號(")表示值,但是 PG 只能用單引號(')表示值,PG 的雙引號(")是表示系統(tǒng)標(biāo)識符的,比如表名或者字段名。MySQL可以使用反單引號(`)表示系統(tǒng)標(biāo)識符,比如表名、字段名,PG 也是不支持的。
事情的起因是同事發(fā)現(xiàn)好像反單引號(`)不能在 PG 中使用。在 MySQL 和 Spark SQL 中,我覺得用反單引號是一個(gè)優(yōu)秀的習(xí)慣,所以我以為反單引號標(biāo)識表名或者字段名應(yīng)該是標(biāo)準(zhǔn)(好吧,所有的“以為”都是錯的);確實(shí)感覺三觀被顛覆。
然后就是去查了一下,下面貼出官網(wǎng)關(guān)于從 MySQL 遷移 PostgreSQL 的 wiki 的答案,大家如果有遷移上的問題(哪怕是思維上的遷移),都可以看這個(gè)鏈接。
MySQL uses ' or " to quote values (i.e. WHERE name = “John”). This is not the ANSI standard for databases. PostgreSQL uses only single quotes for this (i.e. WHERE name = ‘John'). Double quotes are used to quote system identifiers; field names, table names, etc. (i.e. WHERE “l(fā)ast name” = ‘Smith').
MySQL uses ` (accent mark or backtick) to quote system identifiers, which is decidedly non-standard.
翻譯過來就是寫在前面的解決方案。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
安全高效的PostgreSQL數(shù)據(jù)庫遷移解決方案
PostgreSQL數(shù)據(jù)庫是一款高度可擴(kuò)展的開源數(shù)據(jù)庫系統(tǒng),支持復(fù)雜的查詢、事務(wù)完整性和多種數(shù)據(jù)類型由于各種業(yè)務(wù)需求,企業(yè)常常需要將數(shù)據(jù)在不同的云平臺或私有環(huán)境之間遷移,所以本文小編給大家介紹了安全高效的PostgreSQL數(shù)據(jù)庫遷移解決方案,需要的朋友可以參考下2023-11-11
解決postgresql 自增id作為key重復(fù)的問題
這篇文章主要介紹了解決postgresql 自增id作為key重復(fù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
PostgreSQL 禁用全表掃描的實(shí)現(xiàn)
這篇文章主要介紹了PostgreSQL 禁用全表掃描的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL使用MySQL作為外部表(mysql_fdw)
PostgreSQL 提供了一種訪問和操作外部數(shù)據(jù)源的機(jī)制,稱為外部數(shù)據(jù)包裝器,本文主要給大家介紹了PostgreSQL使用MySQL作為外部表的方法,感興趣的朋友跟隨小編一起看看吧2022-11-11
PostgreSQL如何查詢表結(jié)構(gòu)和索引信息
文章介紹了在PostgreSQL中查詢表結(jié)構(gòu)和索引信息的幾種方法,包括使用`\d`元命令、系統(tǒng)數(shù)據(jù)字典查詢以及使用可視化工具DBeaver2024-12-12
基于postgresql數(shù)據(jù)庫鎖表問題的解決
這篇文章主要介紹了基于postgresql數(shù)據(jù)庫鎖表問題的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
在PostgreSQL中使用ltree處理層次結(jié)構(gòu)數(shù)據(jù)的方法
這篇文章主要介紹了在PostgreSQL中使用ltree處理層次結(jié)構(gòu)數(shù)據(jù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03

