
适配过程中发现:如果某个 SQL 的查询条件是 some_col != '',那么返回的结果就会是空
于是做了如下简单实验: SQL
select case when ('1' != '') then '1' when ('1' = '') then '2' else 'else' end as result_1, ('1' = '')::bool as result_2, ('1' != '')::bool as result_3, ('' != '' or '1' = '') as always_true_1, ('1' != '1' or '1' = '1') as always_true_2 result:
{ "postgres": { "result_1": "2", "result_2": false, "result_3": true, "always_true_1": true, "always_true_2": true }, "gaussdb": { "result_1": "else", "result_2": null, "result_3": null, "always_true_1": null, "always_true_2": true } } 完全不明白为什么 gaussdb 的逻辑是这样的,如果有人知道可以告诉我一下吗?
1 momocraft 8 天前 信创要是和 postgre 一样 那创新体现在哪里 :doge: |
2 yeqizhang 8 天前 via Android 刚搜了,这个数据库认为''和 null 是一样的 |
3 hafuhafu 7 天前 为什么 PG 的 result_1 返回"2"呢? 应该是"1"吧。 |
6 shinession 7 天前 |
7 werls 7 天前 华为要体现特殊性啊,虽然都是抄袭 PG 的,但也要改改的。 |
8 hengshenyu 7 天前 via Android gemini 说:取决于你的 GaussDB 兼容模式配置。是这样吗? |
9 woodfizky OP |
10 woodfizky OP @werls 抄 PG ,还抄 Oracle 和 MySQL ,抄完把大家的缺点缝合了,还丢了点优势。 比如这个乐子:PG 天然支持 json/jsonb 类型的 btree 索引。高斯把 btree 索引优化成 ubtree ,但是丢掉了对 json/jsonb 索引的支持。 每次遇到这些想让我骂人的问题之后都十分好奇到底高斯的设计到底是怎么做的。 |
11 cnhongwei 7 天前 这是把''当 null 处理,所有与 null 运行的结果都是 null 。oralce 就是这样的,gaussdb 没有用过,我想他是为了和 oracle 完全兼容。oracle 是把''做 null 处理,也做为 null 存储。 |
12 timesh 7 天前 你就升吧,等哪天为了漏洞再升版本,发现改了特性,就好玩了。 |
13 sivl6p 7 天前 信创没前途,抓紧时间跑路吧 |
14 MIUIOS 7 天前 接触信创的东西会让你不幸,要么文档一坨要么创意魔改。 |
15 knktc 7 天前 你们用的是 A 兼容模式的话就是指 Oracle 兼容模式,行为和 Oracle 是一样的 |
16 yjhatfdu2 7 天前 你的 pg 可能也是信创的,result_1 反正我的 pg 是 1 ,而且怎么看也应该是 1 |
18 sunnysab 7 天前 可以在设置中修改数据库的这个行为吗? |
20 0x663 7 天前 关闭 gaussdb 的 oracle 兼容模式就可以了。 |
21 wangYQ 7 天前 信创的数据库还是尽量选兼容 PG 的或者说 从 PG 套皮或者改过来的,起码语法问题能解决。有的缝合怪真的性能还不行,语法还得重新兼容 |
22 issakchill 7 天前 之前我们也是要 mysql 转 gaussdb 大概方案已经做好了 当时在 mybatis 的 xml 里面全部加上 mysql 跟 gaussdb 的方言。。。那工作量做得想死 后来甲方良心发现 转成 polardbx 基本无缝切换 |
23 visper 7 天前 以前好像试过这个数据库。反正当他是遇到有 null 值啊 null 字段之类的就一定要用 is null,不能等于匹配,否则肯定查不出来之类的。看这上面好像规则就像把''当成 null,然后一等号匹配就直接返回 null. |
25 xiaomushen 7 天前 信创 db 很多语法,都是为了迁就 oracle |
26 PopRain 7 天前 感觉楼主还是见的太少,ORACLE 应该就是这样的,接触过一次很不习惯,反人类 |
27 Elietio 7 天前 via Android 我们俩数据库,一个 Oracle 兼容模式,一个 MySQL 兼容模式,那酸爽 |
28 kkwa56188 7 天前 O 系的, 第一眼看就感觉是 is null 的问题. 这种小知识点, 懂了一次以后就终身懂了, 以后的问题,就留给后人吧 |