PostgreSQL中单引号和双引号的描述
  • 作者:admin
  • 发表时间:2021-05-19 07:51
  • 来源:未知

在pg的sql中,单引号用于标识实际值,双引号用于标识数据库中存在的值,如表名或列名。

例如,执行一个查询:

1从“学生”中选择“姓名”,其中“id”=“1”

引号的优点是在程序中组装sql时,可以简化值的验证,避免sql注入。也就是说,在数据库层面避免了意外。

例如,同样执行的查询:

1 select ';'删除表格学生;'从“学生”开始,其中“id”=“1”

因为周围都是引号,pg只想到“;”也是列名的一部分,没有截断语句,从而成功避免了意外。

补充:PostgreSQL和MySQL在单引号、双引号和反单引号上的区别

解决方案写在前面:

MySQL可以用单引号(')或双引号(')表示值,但PG只能用单引号(')表示值,PG的双引号(')表示系统标识符,如表名或字段名。MySQL可以用倒单引号(`)来表示系统标识符,比如表名、字段名,PG不支持。

事情发生的原因是同事发现PG好像不能用反单引号(`)。在MySQL和Spark SQL中,我认为使用反单引号是一个很好的习惯,所以我认为识别表名或者字段名应该是标准的(嗯,所有的“思考”都是错的);真的感觉三观被颠覆了。

然后,我查了一下,在下面贴了官网关于从MySQL迁移PostgreSQL wiki的回答。如果你有迁移问题(甚至思考迁移),可以看到这个链接。

MySQL使用“或”来引用值(即WHERE name="John ")。这不是ansi数据库标准。PostgreSQL对此仅使用单引号唐山企业网站(即其中name=' John ')。双引号用于引用系统标识符;字段名、表名等。(即WHERE“姓氏”=‘史密斯’)。

MySQL使用`(重音符号或勾号)来引用系统标识符,这显然是非标准的。

翻译过来就是前面写的解决方案。