Postgresql 数据库转义字符操作

产生问题

Postgresql数据库运行下面insert命令

insert into mapping_mac_brand(_id,mac,brand) values(777,'D86595','Toy\'s Myth Inc.')

提示下面的警告:

Warning: nonstandard use of \' in a string literal

HINT: Use '' to write quotes in strings or use the escape string syntax(E...')

解决办法

1.名词解释

string literal :字符串字面量

escape string:转义字符串

escape character:转义字符

Escape Sequence:转义字符串

转义字符:

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

在Java中,不管是String.split(),还是正则表达式,有一些特殊字符需要转义, 这些字符是 ( [ { / ^ - $ ¦ } ])。

Java中转义方法为字符前面加上"\\",这样在split、replaceAll时就不会报错了; 不过要注意,String.contains()方法不需要转义。

但是对于下面表格指定的字符,还是一个\即可转义。比如\n。

2.常见的转义字符

字母前面加上反斜线"\"来表示那些不能显示的ASCII字符.称为转义字符.如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

所有的转义字符和所对应的意义:


转义字符


意义


ASCII码值(十进制)


\a


响铃(BEL)


007


\b


退格(BS) ,将当前位置移到前一列


008


\f


换页(FF),将当前位置移到下页开头


012


\n


换行(LF) ,将当前位置移到下一行开头


010


\r


回车(CR) ,将当前位置移到本行开头


013


\t


水平制表(HT) (跳到下一个TAB位置)


009


\v


垂直制表(VT)


011


\\


代表一个反斜线字符''\'


092


\'


代表一个单引号(撇号)字符


039


\"


代表一个双引号字符


034


\0


空字符(NULL)


000


\ddd


1到3位八进制数所代表的任意字符


三位八进制


\xhh


1到2位十六进制所代表的任意字符


二位十六进制

3.解决方法

1.修改数据库配置,让数据库支持\作为转义字符

早期Postgresql普通字符串中的\是作为转义字符对待的,所以\\最终会认为是\。但是这是不符合SQL标准的,所以在PG 9.1及以后,普通字符串中的\不会被任务是转义字符,而E'xx\x'中的\才会被当作是转义字符。

为了使以前的代码可以在新的PG版本中运行,便有了standard_conforming_strings这个选项,这个选项默认是on,表示按照SQL标准处理字符串,当设置为off时,按照PG的旧版本处理字符串。运行下面命令,开启这个选项即可:

ALTER ROLE xx IN DATABASE yy SET standard_conforming_strings TO off;

2. 用新版本支持的转义字符。''或者 E'',将含有转义的字符串放在单引号里面

'\\' 或者 E'\\'

补充:PG特殊字符的转义

实例1

imos=# select * from test;
 name
------
 c_d
 ab
 _b_c
(3 rows)

imos=# select * from test where name like '_b%';
 name
------
 ab
 _b_c
(2 rows)

imos=# select * from test where name like 'd_b%' escape 'd';
 name
------
 _b_c
(1 row)
imos=# select * from test where name like '\_b%' ;
 name
------
 _b_c
(1 row)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 浅谈PostgreSQL中大小写不敏感问题

    本文主要讨论PostgreSQL中大小写不敏感存在的问题. 默认情况下,PostgreSQL会将列名和表名全部转换为小写状态. 图1 Person与person 如图1所示,我们创建表person,其中包含name列.然后插入一条记录.执行SELECT查询时,使用列名Name和表名Person而不是name和person,发现仍然可以正常获取刚刚插入表person中的记录. 图2 创建表Person? 此时如果我们再想创建表Person,会得到一个错误,因为此时PostgreSQL实际上把表名从

  • PostgreSQL LIKE 大小写实例

    PostgreSQL 数据库 函数upper("字符串"):转成大写字符串 WHERE UPPER("User_Name") LIKE upper(username) 此句查询"User_Name" 中值大小写不区分. SELECT "User_Id","User_Image","User_Name","User_Birthday","User_Sex&qu

  • postgresql 实现将数组变为行

    有的时候需要把数组元素同表中的字段进行关系运算,首先得把array变为记录行 SELECT "unnest"(array[1,2,3]) 结果: unnest 求数组交集: SELECT "unnest"(array[1,2,3]) INTERSECT SELECT "unnest"(array[3,4,5]) 结果: unnest 3 补充:PostgreSQL单列多行变一行&一行变多行 工作中经常遇到这样一个场景,希望将某个字断查询出

  • postgresql~*符号的含义及用法说明

    操作符 ~~ 等效于 LIKE, 而 ~~* 对应 ILIKE. 还有 !~~ 和 !~~* 操作符 分别代表 NOT LIKE 和 NOT ILIKE. 另外: ~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*' ~*搜索 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.

  • postgresql数据库使用说明_实现时间范围查询

    按照日期查询通常有好几种方法: 按照日期范围查询有好几种方法,日期字段类型一般为: Timestamp without timezone 方法一: select * from user_info where create_date >= '2015-07-01' and create_date < '2015-08-15'; 方法二: select * from user_info where create_date between '2015-07-01' and '2015-08-15';

  • 基于PostgreSql 别名区分大小写的问题

    PostgreSql是区分大小写的 如果别名的大小不一致就会提示错误: SELECT * FROM ( SELECT cpi."product_item_id" "PRODUCT_ITEM_ID" FROM prd.up_product_item cpi ) a WHERE a.PRODUCT_ITEM_ID=1 一个很简单的子查询,但是会出错,虽然从语句上看大小写是一致的,但是内部查询中还是使用了小写.PostgreSql对于大写都需要加上双引号的,不然还是视作小

  • Postgresql 数据库转义字符操作

    产生问题 Postgresql数据库运行下面insert命令 insert into mapping_mac_brand(_id,mac,brand) values(777,'D86595','Toy\'s Myth Inc.') 提示下面的警告: Warning: nonstandard use of \' in a string literal HINT: Use '' to write quotes in strings or use the escape string syntax(E.

  • docker安装并持久化postgresql数据库的操作步骤

    安装docker步骤略过 1.拉取postgresql镜像 docker pull postgresql 2.创建本地卷,数据卷可以在容器之间共享和重用,默认会一直存在,即使容器被删除(docker volume inspect pgdata可查看数据卷的本地位置) docker volume create pgdata 3.启动容器 docker run --name postgres2 -e POSTGRES_PASSWORD=password -p 5432:5432 -v pgdata:

  • PostgreSQL数据库的基本查询操作

    目录 查询列 去除重复数据DISTINCT WHERE子句 注释 算术运算符 比较运算符 逻辑运算符 查询列 SELECT语句,用于从表中选取数据.格式: SELECT <列名>,... FROM <表名>; 从Product表中,查询三列. SELECT product_id, product_name, purchase_price FROM Product; 查询所有列,格式: SELECT *FROM <表名>; 星号代表全部列. SELECT *FROM Pr

  • php连接与操作PostgreSQL数据库的方法

    本文实例讲述了php连接与操作PostgreSQL数据库的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: $pg=@pg_connect("host=localhost user=postgres password=sa dbname=employes") or die("can't connect to database."); $query="select * from employes order by serial_no&q

  • Python使用PyGreSQL操作PostgreSQL数据库教程

    PostgreSQL是一款功能强大的开源关系型数据库,本文使用python实现了对开源数据库PostgreSQL的常用操作,其开发过程简介如下: 一.环境信息: 1.操作系统: RedHat Enterprise Linux 4         Windows XP SP2 2.数据库: PostgreSQL8.3 3. 开发工具: Eclipse+Pydev+python2.6+PyGreSQL(提供pg模块) 4.说明: a.PostgreSQL数据库运行于RedHat Linux上,Win

  • C# 操作PostgreSQL 数据库的示例代码

    什么是PostgreSQL? PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS). 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们. PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发. 它不受任何公司或其他私人实体控制. 它是开源的,其源代码是免费提供的. PostgreSQL是跨平台的,可以在许多操作系统上运行,如Linux,FreeBSD,OS X,Solaris和Microsoft

  • PHP连接及操作PostgreSQL数据库的方法详解

    本文实例讲述了PHP连接及操作PostgreSQL数据库的方法.分享给大家供大家参考,具体如下: PostgreSQL扩展在默认情况下在最新版本的PHP 5.3.x中是启用的. 可以在编译时使用--without-pgsql来禁用它.仍然可以使用yum命令来安装PHP-PostgreSQL接口: yum install php-pgsql 在开始使用PHP连接PostgreSQL接口之前,请先在PostgreSQL安装目录中找到pg_hba.conf文件,并添加以下行: # IPv4 local

  • Python 操作 PostgreSQL 数据库示例【连接、增删改查等】

    本文实例讲述了Python 操作 PostgreSQL 数据库.分享给大家供大家参考,具体如下: 我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成. sycopg2是用于Python编程语言的PostgreSQL数据库适配器. psycopg2是非常小,快速,稳定的. 您不需要单独安装此模块,因为默认情况下它会随着Python 2.5.x版本一起发布. pip3 install python-psycopg2 pip3 install ps

  • Python操作PostgreSql数据库的方法(基本的增删改查)

    Python操作PostgreSql数据库(基本的增删改查) 操作数据库最快的方式当然是直接用使用SQL语言直接对数据库进行操作,但是偶尔我们也会碰到在代码中操作数据库的情况,我们可能用ORM类的库对数控库进行操作,但是当需要操作大量的数据时,ORM的数据显的太慢了.在python中,遇到这样的情况,我推荐使用psycopg2操作postgresql数据库 psycopg2 官方文档传送门: http://initd.org/psycopg/docs/index.html 简单的增删改查 连接

  • postgreSQL数据库的监控及数据维护操作

    目前postgreSQL数据库的管理,数据查询等都需要安装postgreSQL软件或安装pgadmin等,远程访问都需要先登录到服务器等繁琐的操作.如果是开发团队,那么每个开发,测试,管理人员都要经历这个麻烦的过程. 使用Treesoft数据库管理系统,基于web方式管理postgreSQL,只需安装一次,大家直接通过浏览器使用,维护及监控数据库,大大简化工作量. 监控的指标包括:连接数,数据库大小,表空间,锁情况,QPS事务数等. Treesoft数据库管理系统,支持直接网络在线维护数据,数据

随机推荐