适配信创数据库的人的精神状态 be like

1 月 13 日
 woodfizky

适配过程中发现:如果某个 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,
    ('1' != '' 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 的逻辑是这样的,如果有人知道可以告诉我一下吗?

4876 次点击
所在节点    PostgreSQL
28 条回复
momocraft
1 月 14 日
信创要是和 postgre 一样 那创新体现在哪里 :doge:
yeqizhang
1 月 14 日
刚搜了,这个数据库认为''和 null 是一样的
hafuhafu
1 月 14 日
为什么 PG 的 result_1 返回"2"呢?
应该是"1"吧。
woodfizky
1 月 14 日
@hafuhafu 还真是。我在内网做的查询,不太好复制出来,手敲的 result ,敲错了。
imaple
1 月 14 日
@yeqizhang 没法解释 always_true_1 变成 null 了呀
shinession
1 月 14 日
这个特性怎么像 float('nan'), 无法比较
werls
1 月 14 日
华为要体现特殊性啊,虽然都是抄袭 PG 的,但也要改改的。
hengshenyu
1 月 14 日
gemini 说:取决于你的 GaussDB 兼容模式配置。是这样吗?
woodfizky
1 月 14 日
@hengshenyu 兼容模式是 A 模式还是什么模式吧。按理说应该用 pg 兼容模式的,出于各种原因领导不让。

但是兼容不兼容的,作为程序员看到这么反直觉的所谓特性真的很想骂人。。。
woodfizky
1 月 14 日
@werls 抄 PG ,还抄 Oracle 和 MySQL ,抄完把大家的缺点缝合了,还丢了点优势。

比如这个乐子:PG 天然支持 json/jsonb 类型的 btree 索引。高斯把 btree 索引优化成 ubtree ,但是丢掉了对 json/jsonb 索引的支持。

每次遇到这些想让我骂人的问题之后都十分好奇到底高斯的设计到底是怎么做的。
cnhongwei
1 月 14 日
这是把''当 null 处理,所有与 null 运行的结果都是 null 。oralce 就是这样的,gaussdb 没有用过,我想他是为了和 oracle 完全兼容。oracle 是把''做 null 处理,也做为 null 存储。
timesh
1 月 14 日
你就升吧,等哪天为了漏洞再升版本,发现改了特性,就好玩了。
sivl6p
1 月 14 日
信创没前途,抓紧时间跑路吧
MIUIOS
1 月 14 日
接触信创的东西会让你不幸,要么文档一坨要么创意魔改。
knktc
1 月 14 日
你们用的是 A 兼容模式的话就是指 Oracle 兼容模式,行为和 Oracle 是一样的
yjhatfdu2
1 月 14 日
你的 pg 可能也是信创的,result_1 反正我的 pg 是 1 ,而且怎么看也应该是 1
yeqizhang
1 月 14 日
@imaple null or null 有啥不能解释的
sunnysab
1 月 14 日
可以在设置中修改数据库的这个行为吗?
Danswerme
1 月 14 日
@yjhatfdu2 楼主 db 在内网,手敲的结果,敲错啦
0x663
1 月 14 日
关闭 gaussdb 的 oracle 兼容模式就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1185366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX