天天看点

《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之四:特殊字符和符号

postgresql是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着postgresql的应用越来越广泛,oracle向postgresql数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先是迁移数据,然后就是sql、存储过程、序列等程序中不同的数据库中数据的使用方式的转换。下面根据自己的理解和测试,写了一些sql以及数据库对象转换方面的文章,不足之处,尚请多多指教。

oracle中,空字符串( '' )很多时候是和null同样处理的。给varchar2和char类型赋值的时候按照null处理。在给日期类型或者数字类型赋值的时候,也是按照null处理。但是在where条件部分,=‘’和 is null 是不同的。

postgresql里面,空字符串( '' )和 null是不同的。完全是不同的处理。转换sql的时候,一定要注意。

oracle中,比较运算符之间是可以有空格的。比如【> = 】这样的写法是允许的。而postgresql中,运算符之间不能有空格。

逃逸的意思是有特殊意义的字符,前面如果加上逃逸字符的话,就不代表它的特殊含义,而代表它的字符本意。

oracle的sql中,使用( ' )来逃逸它本身。oracle没有其它的标准逃逸字符。比如"n"并不代表回车,而是代表它的本意的"n"两个字符。如果输入回车的话,使用chr(10)来表示。在正则表达式等需要使用特殊字符本意的时候,使用关键字(escape)后面定义的字符进行逃逸。

postgresql的sql,也支持使用( ' )来逃逸它本身。老版的还支持使用反斜杠( ), 但新版已经不使用。oracle定义了标准的逃逸字串(e'xxx') 格式。 在正则表达式等需要使用特殊字符本意的时候,默认使用""做逃逸字串。也可以使用关键字(escape)后面定义的字符进行逃逸。

数据迁移的时候,老版的postgresql中,需要对逃逸字串进行特殊处理。比如把"“替换成"\\"。新版已经不再需要。可以直接按照oracle的方式直接转换。