V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
woodfizky
V2EX  ›  PostgreSQL

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

  •  1
     
  •   woodfizky · 22 小时 56 分钟前 · 3101 次点击

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

    第 1 条附言  ·  4 小时 2 分钟前
    感谢各位纠错,postgres 的 result_1 应该是 1 。
    DB 在内网,复制不方便,手敲敲错了,不好意思。
    24 条回复    2026-01-14 18:56:12 +08:00
    momocraft
        1
    momocraft  
       20 小时 10 分钟前   ❤️ 2
    信创要是和 postgre 一样 那创新体现在哪里 :doge:
    yeqizhang
        2
    yeqizhang  
       20 小时 2 分钟前 via Android
    刚搜了,这个数据库认为''和 null 是一样的
    hafuhafu
        3
    hafuhafu  
       11 小时 53 分钟前
    为什么 PG 的 result_1 返回"2"呢?
    应该是"1"吧。
    woodfizky
        4
    woodfizky  
    OP
       11 小时 50 分钟前 via Android
    @hafuhafu 还真是。我在内网做的查询,不太好复制出来,手敲的 result ,敲错了。
    imaple
        5
    imaple  
       11 小时 49 分钟前
    @yeqizhang 没法解释 always_true_1 变成 null 了呀
    shinession
        6
    shinession  
       11 小时 31 分钟前
    这个特性怎么像 float('nan'), 无法比较
    werls
        7
    werls  
       11 小时 28 分钟前
    华为要体现特殊性啊,虽然都是抄袭 PG 的,但也要改改的。
    hengshenyu
        8
    hengshenyu  
       11 小时 18 分钟前 via Android
    gemini 说:取决于你的 GaussDB 兼容模式配置。是这样吗?
    woodfizky
        9
    woodfizky  
    OP
       10 小时 50 分钟前 via Android
    @hengshenyu 兼容模式是 A 模式还是什么模式吧。按理说应该用 pg 兼容模式的,出于各种原因领导不让。

    但是兼容不兼容的,作为程序员看到这么反直觉的所谓特性真的很想骂人。。。
    woodfizky
        10
    woodfizky  
    OP
       10 小时 46 分钟前 via Android   ❤️ 1
    @werls 抄 PG ,还抄 Oracle 和 MySQL ,抄完把大家的缺点缝合了,还丢了点优势。

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

    每次遇到这些想让我骂人的问题之后都十分好奇到底高斯的设计到底是怎么做的。
    cnhongwei
        11
    cnhongwei  
       10 小时 44 分钟前
    这是把''当 null 处理,所有与 null 运行的结果都是 null 。oralce 就是这样的,gaussdb 没有用过,我想他是为了和 oracle 完全兼容。oracle 是把''做 null 处理,也做为 null 存储。
    timesh
        12
    timesh  
       10 小时 20 分钟前
    你就升吧,等哪天为了漏洞再升版本,发现改了特性,就好玩了。
    sivl6p
        13
    sivl6p  
       10 小时 11 分钟前
    信创没前途,抓紧时间跑路吧
    MIUIOS
        14
    MIUIOS  
       10 小时 5 分钟前   ❤️ 1
    接触信创的东西会让你不幸,要么文档一坨要么创意魔改。
    knktc
        15
    knktc  
       9 小时 46 分钟前
    你们用的是 A 兼容模式的话就是指 Oracle 兼容模式,行为和 Oracle 是一样的
    yjhatfdu2
        16
    yjhatfdu2  
       9 小时 0 分钟前
    你的 pg 可能也是信创的,result_1 反正我的 pg 是 1 ,而且怎么看也应该是 1
    yeqizhang
        17
    yeqizhang  
       8 小时 51 分钟前 via Android
    @imaple null or null 有啥不能解释的
    sunnysab
        18
    sunnysab  
       8 小时 50 分钟前
    可以在设置中修改数据库的这个行为吗?
    Danswerme
        19
    Danswerme  
       7 小时 59 分钟前 via iPhone
    @yjhatfdu2 楼主 db 在内网,手敲的结果,敲错啦
    0x663
        20
    0x663  
       6 小时 26 分钟前
    关闭 gaussdb 的 oracle 兼容模式就可以了。
    wangYQ
        21
    wangYQ  
       2 小时 30 分钟前
    信创的数据库还是尽量选兼容 PG 的或者说 从 PG 套皮或者改过来的,起码语法问题能解决。有的缝合怪真的性能还不行,语法还得重新兼容
    issakchill
        22
    issakchill  
       2 小时 26 分钟前
    之前我们也是要 mysql 转 gaussdb 大概方案已经做好了 当时在 mybatis 的 xml 里面全部加上 mysql 跟 gaussdb 的方言。。。那工作量做得想死
    后来甲方良心发现 转成 polardbx 基本无缝切换
    visper
        23
    visper  
       2 小时 16 分钟前
    以前好像试过这个数据库。反正当他是遇到有 null 值啊 null 字段之类的就一定要用 is null,不能等于匹配,否则肯定查不出来之类的。看这上面好像规则就像把''当成 null,然后一等号匹配就直接返回 null.
    yeqizhang
        24
    yeqizhang  
       1 小时 19 分钟前 via Android
    @visper null 在很多数据库都是特殊的不能用等于号
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:15 · PVG 20:15 · LAX 04:15 · JFK 07:15
    ♥ Do have faith in what you're doing.