Mysql替换为国产vastBase库(Postgres)记录

mysql中大多数函数无法在Postgres中使用,语法也有差异。以下记录不兼容点与修复方法。

一、语法差异与修复

1、mysql支持 insert into() value()写法。postgres不支持。必须使用values

2、mysql中防止字段与关键字冲突的`在postgres中无法被识别。需要把`替换为"。

3、mysql中表字段名可以自由设定大小写,而postgres中所有字段名都会被强制转为小写。虽然日常使用sql语句查询时大小写不敏感。但在使用"符号标注字段时则会大小写敏感。若使用大写则会导致无法找到对应字段。这点会影响Mybatis。当在程序中使用@TableField和@TableId注解时。若大小写不一致会导致程序报错。

4、mysql8之前对group by关键字没有做强制要求。所以会出现查询多字段时使用group by根据单字段去重。这个写法在Postgres中报错。可以使用 distinct on()进行去重。用此方法时可以配合order by指定字段排序,取第一条数据。

5、mysql中limit语法为 limit {offset},{size},在postgres中需要改为limit {size} offset{offset}

二、函数差异与替代方法

1、ifnull函数无法使用。可以使用COALESCE()函数。此函数会返回参数中首个不为null的函数。

2、if()函数无法使用。可以使用CASE WHEN函数替代。

3、date_sub()函数无法使用。postgres可以直接使用加减号计算。

4、date_diff()函数无法使用。可以使用date_part('day','startdate-enddate')函数。

5、date_format()函数无法使用,可以使用to_char ()函数,同时格式变为yyyymmdd

6、sysdate()无法使用,改为now()

7、find_in_set()无法使用。替换为ANY(string_to_array(column,','))

8、group_concat无法使用,替换为array_to_string(array_agg(t.cname),',') 或 string_agg(t.cname,',')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值