avatar
一个奇怪的问题# Database - 数据库
w*r
1
Oracle的sqlplus里面使用''表示的blank string似乎会被自动翻译成null, 这样的话
我要test 一个 column是blank的话怎么写???='' !=''都不太对劲儿,
今天刚发现的,一直没有注意过这个问题
avatar
c*e
2
啥叫blank string?一个column是blank不是null么?

【在 w*r 的大作中提到】
: Oracle的sqlplus里面使用''表示的blank string似乎会被自动翻译成null, 这样的话
: 我要test 一个 column是blank的话怎么写???='' !=''都不太对劲儿,
: 今天刚发现的,一直没有注意过这个问题

avatar
w*r
3
null和blank是不一样的, blank只是说是一个空字符串,但是NULL是空指针嘛,何况NULL
!=NULL, 但是''==''呀

【在 c*******e 的大作中提到】
: 啥叫blank string?一个column是blank不是null么?
avatar
c*e
4
什么交一个空字符串?我知道比如C里面initialize什么
相当于给了把地址指到了变量,但是不是很理解数据库里面
空字符串到底是什么?
我知道null是不能和null相等的
这么说吧,如果你想插入一个空字符串你怎么做?

NULL

【在 w*r 的大作中提到】
: null和blank是不一样的, blank只是说是一个空字符串,但是NULL是空指针嘛,何况NULL
: !=NULL, 但是''==''呀

avatar
w*r
5
insert into t values('');

【在 c*******e 的大作中提到】
: 什么交一个空字符串?我知道比如C里面initialize什么
: 相当于给了把地址指到了变量,但是不是很理解数据库里面
: 空字符串到底是什么?
: 我知道null是不能和null相等的
: 这么说吧,如果你想插入一个空字符串你怎么做?
:
: NULL

avatar
M*r
6
You can use IS NULL/IS NOT NULL
On your original table:
If the column is defined as NOT NULL, you won't get NULL
If the column can have NULL, then, blank string is NULL (Oracle does the
conversion for a really long time)
You can also use nvl function, but may not be what you really want.

【在 w*r 的大作中提到】
: Oracle的sqlplus里面使用''表示的blank string似乎会被自动翻译成null, 这样的话
: 我要test 一个 column是blank的话怎么写???='' !=''都不太对劲儿,
: 今天刚发现的,一直没有注意过这个问题

avatar
c*e
7
你试试看是不是is null

【在 w*r 的大作中提到】
: insert into t values('');
avatar
c*e
8
this is clear, I am not familiar with oracle, hehe

【在 M*****r 的大作中提到】
: You can use IS NULL/IS NOT NULL
: On your original table:
: If the column is defined as NOT NULL, you won't get NULL
: If the column can have NULL, then, blank string is NULL (Oracle does the
: conversion for a really long time)
: You can also use nvl function, but may not be what you really want.

avatar
w*r
9
我当然知道在oracle里面这个insert会被变成null, 这正是问题所在,TNND 这太烦了,
老爷偶要null的时候当然会把null给送去表里,你丫给我自动换什么呀,这个行为几乎
和所有其他的RDBMS都不一样!
造成的结果是如果有一个java function embeded在数据库里面,送去一个空字符的时候
就会跳出null exception, 你说丫的是不是很烦?
avatar
c*e
10
前面不是说了么,设成not null就会是''了

【在 w*r 的大作中提到】
: 我当然知道在oracle里面这个insert会被变成null, 这正是问题所在,TNND 这太烦了,
: 老爷偶要null的时候当然会把null给送去表里,你丫给我自动换什么呀,这个行为几乎
: 和所有其他的RDBMS都不一样!
: 造成的结果是如果有一个java function embeded在数据库里面,送去一个空字符的时候
: 就会跳出null exception, 你说丫的是不是很烦?

avatar
c*e
11
再说也有问题,不熟悉的人select *看一下
也不容易看出来哪个是null,哪个不是吧
我觉得你的想法比较奇怪

【在 w*r 的大作中提到】
: 我当然知道在oracle里面这个insert会被变成null, 这正是问题所在,TNND 这太烦了,
: 老爷偶要null的时候当然会把null给送去表里,你丫给我自动换什么呀,这个行为几乎
: 和所有其他的RDBMS都不一样!
: 造成的结果是如果有一个java function embeded在数据库里面,送去一个空字符的时候
: 就会跳出null exception, 你说丫的是不是很烦?

avatar
w*r
12
设成not null也有问题,bulk insert 就出错了,bulk insert/sql loader就会把''解释
成null, 然后就有了constraint的问题,嘿嘿,这个设计反正是比较失败,string
literal ''和null本来就不是一回事儿,要仔细得区分开,哪有这种GP不通的设计,自动
把一个string literal给解释成null的?

【在 c*******e 的大作中提到】
: 前面不是说了么,设成not null就会是''了
avatar
c*e
13
你说你要''干啥?

【在 w*r 的大作中提到】
: 设成not null也有问题,bulk insert 就出错了,bulk insert/sql loader就会把''解释
: 成null, 然后就有了constraint的问题,嘿嘿,这个设计反正是比较失败,string
: literal ''和null本来就不是一回事儿,要仔细得区分开,哪有这种GP不通的设计,自动
: 把一个string literal给解释成null的?

avatar
w*r
14
不是我要it, 是it 存在呀,都变成null让数据的load的时候有问题,那几十万条记录里
面有几行有'',为这个null还要改primary index, 要不就还要update一下,再说''变成
null传到function里面就会报错,烦不烦?

【在 c*******e 的大作中提到】
: 你说你要''干啥?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。