数据库——postgresql数据库中standard_conforming_strings对‘\\’的影响

问题描述:一直用正则表达式 ('\\d{10}')来查询以数字开头的,并且是十个数字的值,‘ \\d ’代表的是以数字开头,一直都是ok的,突然有一天‘ \\d ’不再起作用,查了一上午都没发现是什么原因,问数据库管理人员才知道前天晚上数据库进行了升级,从9.1升级到了9.5.然后向这个方向去调查,发现standard_conforming_strings对‘\\’的影响。

 

standard_conforming_strings功能简介

如果服务器的编码格式为UTF-8 ,则应用Unicode转义。

而在Unicode转义语法中,反斜杠后的任何其他字符均按字面意义使用。因此,要包含反斜杠字符,请写两个反斜杠(\\)。即想要表达‘\d’的含义,在sql文中要写‘ \\d ’。

同样,仅在打开配置参数standard_conforming_strings时,字符串常量的Unicode转义语法才起作用。这是因为该语法可能会使解析SQL语句的客户端感到困惑,以至于可能导致SQL注入和类似的安全问题。如果参数设置为off,则此语法将被拒绝并显示一条错误消息。要从字面上包括转义字符,请将其写入两次

解决办法:sql文没有问题,或者说不改变sql文,找到postgresql.conf(路径D:\Program Files\PostgreSQL\9.6\data,PostgreSQL安装路径下的data文件夹下面)文件,设置standard_conforming_strings=on;(配置文件中standard_conforming_strings这个设置可能前面有个#,代表是注释掉的,去掉就ok了

警告

如果配置参数standard_conforming_stringsoff,则PostgreSQL可以在常规和转义字符串常量中识别反斜杠转义。但是,从PostgreSQL 9.1开始,默认值为on,这意味着仅在转义字符串常量中识别反斜杠转义。此行为更符合标准,但是可能会破坏依赖历史行为的应用程序,在该行为中始终识别出反斜杠转义符。解决方法是,可以将此参数设置为off,但是最好不要使用反斜杠转义来进行迁移。如果您需要使用反斜杠转义符来表示特殊字符,请使用编写字符串常量E

除之外standard_conforming_strings,配置参数escape_string_warningbackslash_quote还控制字符串常量中反斜杠的处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值