产生问题

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)

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

标签:
Postgresql,转义字符

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

评论“Postgresql 数据库转义字符操作”

暂无“Postgresql 数据库转义字符操作”评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?