''
为有效的内容,但是 Oracle 和兼容 Oracle 的数据库会将''
视作NULL
。 以此为前置条件,使用信创数据库官方的迁移平台进行数据迁移,将某个有NOT NULL
列且包含大量''
的表迁移到信创数据库中,竟然能够顺利执行。落库后经过查询,发现''
被转换成了一个没有内容、不是 NULL 、长度为 0 (正常情况下,NULL
的长度为NULL
)、显示为空、强转十六进制后显示为0x
(即 RAW 值也为空)、无法通过任何 where 条件选中(IS NULL
、=''
等)的东西。''
等价为NULL
,但是我可以在数据库里创建一个带有列COLNAME VARCHAR(n) NOT NULL DEFAULT ''
的表。表现是如果进行INSERT
不指定该列的值,直接出发违反约束的 ERROR 。![]() | 1 rainmint 2024-07-26 10:43:54 +08:00 国产? 那没事了 |
2 Leviathann 2024-07-26 10:46:39 +08:00 ![]() 不是 pg 套壳? |
![]() | 3 jstony 2024-07-26 10:46:45 +08:00 嗯嗯,不急,罗马不是一天建成的,又不是不能用,呃...编不下去了,哈哈。 |
4 zhangeric 2024-07-26 10:47:42 +08:00 软件有 bug 很正常,关键是修复 bug 得态度和速度. |
5 skuuhui 2024-07-26 11:02:42 +08:00 创肯定要创,但是真的用就是你们自己的问题了。创是给上面看的,就客观唯物主义理论来说,本来应该做好 2 种同时存在同时长期使用的事实,或许你们数据库的 api 只需要未实现的接口 |
6 yifangtongxing28 2024-07-26 11:11:53 +08:00 有问题,才能养活一群工程师嘛 |
![]() | 7 jasonkayzk 2024-07-26 11:18:21 +08:00 哈哈,很符合对信创的印象! |
8 Laobai 2024-07-26 11:23:37 +08:00 高斯? |
![]() | 9 HOMO114514 OP ![]() 再补充一个很难绷的事情 差点忘记了 6. 这个数据库一开始大肆宣传建设开源共创社区,发行了一个开源版,还煞有介事地搞了一系列的培训和认证体系。本质上是因为要遵守 GPL 协议必须开源,开源版的发行基线基本上是比商用版落后 1-2 个大版本。 最近这个数据库艰难地完成了 100%国产自主可控的认证,代表着对于工信部,它所有的代码都是自己的,因此也不再有遵循 GPL 协议的需要,后续开源版将会直接放弃。 |
10 qviqvi 2024-07-26 11:40:27 +08:00 话说如果用 pg 或 mysql ,有被制裁的风险吗?好像伊朗也能用开源软件吧。政府用信创也就算了,普通企业用信创真难受 |
![]() | 11 murmur 2024-07-26 11:43:55 +08:00 oracle 兼容模式,人大金仓? |
![]() | 12 murmur 2024-07-26 11:44:35 +08:00 ![]() @qviqvi 不是被制裁的风险,如果用 pg 、mysql ,数据丢了,是你的问题,你选的开源软件,如果是国产数据库,这是支持国产不可避免的代价,我们支持国产化,锅甩出去了 |
13 EIJAM 2024-07-26 11:44:59 +08:00 via Android @skuuhui 用这东西的要么是国企,要么是给 gov 和国企开发产品的,都是不得不用。真有的选谁会选信创这种垃圾 |
![]() | 14 dbskcnc 2024-07-26 11:47:56 +08:00 本来是他们自己内部自己吃翔,但是现在搞得很多人要跟着他们吃翔,并且打着伟光正的旗号,有其它好吃的你也不能吃,这个就很恶心。 所以自由,民主虽然不能当饭吃,但是它基本可以让你想吃饭的时候就吃饭,不用被迫吃翔。 |
15 airportIllIl 2024-07-26 11:52:12 +08:00 via Android 某些厂商的策略就是,让客户来做测试,出了问题一块解决,给大客户提供专门技术支持,小客户就自求多福 |
16 messaround 2024-07-26 11:53:56 +08:00 爽吧? |
![]() | 17 UN2758 2024-07-26 11:58:04 +08:00 ![]() |
![]() | 18 brom111 2024-07-26 12:01:06 +08:00 很久之前不是有个幽默说法吗。数据太大查询速度慢,把数据导入到 oracle 才能查 |
19 ExplodingDragon 2024-07-26 12:01:39 +08:00 草,不会是某 G 开头的 DB 数据库吧 |
20 ownSun 2024-07-26 12:10:28 +08:00 @ExplodingFKL #19 现在信创的数据库指定这个把 |
![]() | 21 sun1991 2024-07-26 12:20:19 +08:00 #2 没看懂. Oracle Not Null 列里面存在了大量空字串''的值? 怎么进去的? |
![]() | 22 fyooo 2024-07-26 12:40:40 +08:00 via iPhone 哈哈,有意思,谢谢分享 |
![]() | 23 crz 2024-07-26 12:54:55 +08:00 @sun1991 看描述,合理的理解可能是,源不是 oracle 兼容,或者自定义规则空字符串有效,信创库是 oracle 兼容,导入后空字符串因为某种机制转换为无效值 |
![]() | 24 iyaozhen 2024-07-26 13:46:25 +08:00 ![]() 工作中遇到过类似的事情 问过大领导,我们能不能不做这块 领导说:这块的钱你赚不赚,不赚就可以不做。其实答案很明显,要是马云说吃一口给 1w ,我能给马云吃破产。 |
25 Lighfer 2024-07-26 14:07:33 +08:00 不用猜,就是达梦 |
26 random1221 2024-07-26 14:12:41 +08:00 到底是哪一家啊 |
27 forsuperper 2024-07-26 14:22:57 +08:00 ![]() 500 强 开源,集群节点。。。这个几个合起来就是爱国 |
28 kenvix 2024-07-26 14:25:16 +08:00 华为? |
![]() | 29 HOMO114514 OP ![]() @sun1991 源库里`''`是有效的非空值,比如 DB2 、SQL Server ,但客户方统一规定信创数据库使用 Oracle 兼容模式,即`''`等价`NULL`。 预期当中,这个库里的数据应该根本导入不了信创数据库的,在导入过程就应该触发违反非空约束。 |
30 ZZ74 2024-07-26 14:48:26 +08:00 太久没结束数据库,我咋记得 oralce 空 和 null 两码事啊.... 难道记反了 以前写 IS NOT NULL/IS NULL 后面得跟一个是否空的判断 |
31 random1221 2024-07-26 14:56:39 +08:00 @ZZ74 你记错了,oracle 不区分''和 null |
32 bugmaker233 2024-07-26 15:14:10 +08:00 又不是不能用.jpg |
![]() | 33 bug51 2024-07-26 15:27:31 +08:00 华为? |
![]() | 34 sun1991 2024-07-26 15:53:15 +08:00 |
![]() | 35 AAAAAAAAAAAAAAAA 2024-07-26 16:02:41 +08:00 达梦吗 |
![]() | 36 hihanley 2024-07-26 16:40:42 +08:00 达梦 |
37 dbpe 2024-07-26 16:41:25 +08:00 兼容 oracle 达梦么? |
38 dbpe 2024-07-26 16:41:46 +08:00 @Leviathann 真的是套壳就谢天谢地了..最烦的加作料 |
![]() | 39 codingmiao 2024-07-26 16:57:35 +08:00 @HOMO114514 这顿操作没看明白,为了遵守 GPL 开源,但是所谓自主可控后为什么就不需要遵守 GPL 了?那别人用的过程中发现他基于 GPL 的代码痕迹,那他不完蛋了。。 |
40 mark2025 2024-07-26 17:16:05 +08:00 人在信创 公众号? |
![]() | 41 HOMO114514 OP ![]() @codingmiao 自主可控,意味着“代码 100%纯自研”,意味着名义上“不借助任何的开源项目实现”,既然我名义上都不用它的代码了,我当然不需要遵守它的 GPL 协议 信创客户都是国产企业,都是国内自产自销,私有化部署的全是银行这种高度隔离的大客户,其它客户只能用云上服务和云底座,很难接触到数据库二进制程序。用户群够小,出了舆情精准定位和处理非常轻松,谁会因为所谓的开源正义丢了自己饭碗呢? 而且真有人能把这整个数据库系统的代码或者二进制文件偷去给国际的开源警察审查,他首先会吃到国安+法务的组合拳,这可是正儿八经的泄敌 再说了,国内目前处于蛮荒的开源环境,不遵守协议,他又奈我何?…… |
42 dyllen 2024-07-26 19:06:48 +08:00 @qviqvi 就是说的什么被制裁的风险,代码都在我手上了,还怕什么制裁呀,后面升级我不要了,自我发展。实际也没见过那个开源软件伊朗,朝鲜用不了的,还有谁比他俩的制裁还严重的吗? |
43 ShuWei 2024-07-26 20:44:49 +08:00 我怎么感觉 2 、3 其实没啥问题,仅仅是因为 op 带着第三方的刻板印象 |
44 macha 2024-07-26 20:50:43 +08:00 我就做过 Oracle 兼容,太难搞了。从 SQL 解析改到查询计划,当时都快吐血了。 |
![]() | 45 PopRain 2024-07-26 20:52:47 +08:00 @HOMO114514 这个就是胡整了,原来数据库里面有空字符串,说明应用是支持的,为什么要切换到 ORACLE 模式,应用支持吗?数据库改好再去改应用,神经两次? |
46 iseki 2024-07-26 20:58:51 +08:00 via Android 2 难道不是数据库 bug 吗,自己内部都不一致了 |
![]() | 47 HOMO114514 OP @PopRain 强制要求全部应用系统使用 ORACLE 模式是客户方数据库中心定的开发规范,类似的规定还有禁止使用 Procedure 等。 迁移到新的数据库,就要从头树立新的、良好的开发规范。不然以后随着业务迭代,留下来的屎山就又收不住了,比如 MySQL 的 UTF8 和 UTF8mb4 |
![]() | 48 PopRain 2024-07-26 21:17:12 +08:00 @HOMO114514 那你也应该应用先改好,把原来的数据库整理好再去迁移数据吧。支持空字符的数据库应用,我不相信不改就能没有问题跑起来。 另外, 迁移工具毕竟不是数据库厂商的主业,完善程度肯定不如数据库本身,之前试 MySQL 官方的 workbench 迁移工具,安装就遇到各种问题,需要自己去改 python ,才 30G 的数据库都迁移不到 MySql 。。。 最后还是自己写的迁移工具。 |
![]() | 49 HOMO114514 OP @PopRain 恰恰相反,我们这边的信创流程都是先把数据迁移弄好,迁移完之后带着迁移报告、开发规范、改造指南一并交接应用,再让应用接入适配、改造、联调联测 “迁移工具毕竟不是数据库厂商的主业”,常规开发是这样的,但是信创信创,讲国产替代就一定会有被替代的 DB 在,所以信创数据库的迁移工具都会全力以赴去适配某些 DB ,尤其是 Oracle 。迁移都做不好怎么去替代呢? |
![]() | 50 irrigate2554 2024-07-27 10:15:13 +08:00 pgsql 的代码非改出个 mysql 兼容模式和 orcale 兼容模式,出问题不是很正常么 |