适配过程中发现:如果某个 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
momocraft 20 小时 10 分钟前 信创要是和 postgre 一样 那创新体现在哪里 :doge:
|
2
yeqizhang 20 小时 2 分钟前 via Android
刚搜了,这个数据库认为''和 null 是一样的
|
3
hafuhafu 11 小时 53 分钟前
为什么 PG 的 result_1 返回"2"呢?
应该是"1"吧。 |
6
shinession 11 小时 31 分钟前
|
7
werls 11 小时 28 分钟前
华为要体现特殊性啊,虽然都是抄袭 PG 的,但也要改改的。
|
8
hengshenyu 11 小时 18 分钟前 via Android
gemini 说:取决于你的 GaussDB 兼容模式配置。是这样吗?
|
9
woodfizky OP |
10
woodfizky OP @werls 抄 PG ,还抄 Oracle 和 MySQL ,抄完把大家的缺点缝合了,还丢了点优势。
比如这个乐子:PG 天然支持 json/jsonb 类型的 btree 索引。高斯把 btree 索引优化成 ubtree ,但是丢掉了对 json/jsonb 索引的支持。 每次遇到这些想让我骂人的问题之后都十分好奇到底高斯的设计到底是怎么做的。 |
11
cnhongwei 10 小时 44 分钟前
这是把''当 null 处理,所有与 null 运行的结果都是 null 。oralce 就是这样的,gaussdb 没有用过,我想他是为了和 oracle 完全兼容。oracle 是把''做 null 处理,也做为 null 存储。
|
12
timesh 10 小时 20 分钟前
你就升吧,等哪天为了漏洞再升版本,发现改了特性,就好玩了。
|
13
sivl6p 10 小时 11 分钟前
信创没前途,抓紧时间跑路吧
|
14
MIUIOS 10 小时 5 分钟前 接触信创的东西会让你不幸,要么文档一坨要么创意魔改。
|
15
knktc 9 小时 46 分钟前
你们用的是 A 兼容模式的话就是指 Oracle 兼容模式,行为和 Oracle 是一样的
|
16
yjhatfdu2 9 小时 0 分钟前
你的 pg 可能也是信创的,result_1 反正我的 pg 是 1 ,而且怎么看也应该是 1
|
18
sunnysab 8 小时 50 分钟前
可以在设置中修改数据库的这个行为吗?
|
20
0x663 6 小时 26 分钟前
关闭 gaussdb 的 oracle 兼容模式就可以了。
|
21
wangYQ 2 小时 30 分钟前
信创的数据库还是尽量选兼容 PG 的或者说 从 PG 套皮或者改过来的,起码语法问题能解决。有的缝合怪真的性能还不行,语法还得重新兼容
|
22
issakchill 2 小时 26 分钟前
之前我们也是要 mysql 转 gaussdb 大概方案已经做好了 当时在 mybatis 的 xml 里面全部加上 mysql 跟 gaussdb 的方言。。。那工作量做得想死
后来甲方良心发现 转成 polardbx 基本无缝切换 |
23
visper 2 小时 16 分钟前
以前好像试过这个数据库。反正当他是遇到有 null 值啊 null 字段之类的就一定要用 is null,不能等于匹配,否则肯定查不出来之类的。看这上面好像规则就像把''当成 null,然后一等号匹配就直接返回 null.
|