【发布时间】:2017-01-06 01:40:44
【问题描述】:
当我将数字数据简单地插入到 varchar 中时,我不太明白 字段为什么它用 2 个空格填充它。 varchar 不应该修剪空格(尾随好的......但是你用空格“frontpad”的规则在哪里)。为什么然后用 2 个前导空格填充
INSERT INTO v VALUES ( ,1243444,3455435,8768810,'fdff',5,7,8,,)
这里( ,1243444,3455435,8768810,'fdff',5,7,8,,) 是(someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)
所以数据看起来像这样
SEL CHAR2HEXINT ( colA ) ,colA FROM v
313732353732 172572 /* this is some other pre-existing value*/
2020202033343535343335 3455435 /* this is value just inserted */
所以如果你在上面看到20202020 Hex 表示2 spaces aka ' '
第二个问题(不延续上述情况)
我也有像这样的 varchar (50 ) col 的数据
HMSA
232434343
HMSA
4343434343
434343434
这里HMSA 有一个尾随空格2020 HEX,但其他值没有trailing spaces。不知道发生了什么。现在varchar 不应该扔掉所有尾随空格吗? HMSA<space>的数据怎么来的
不确定 。有什么想法吗?
好的,让我们来看看由此产生的一些奇怪之处:
insert ( 'yada ') into tb /* tb is volatile & SET.There are 4 spaces */
insert ( 'yada') into tb
Query Failed. 2802: Duplicate row error in tb
好吧,看看这是什么样子
7961646120202020 yada /*There are 4 spaces - 20 x 4 */
所以在第二次插入时,它抛弃了空间比较部分并做了一个trim(oldvalue) vs trim ( new value )
【问题讨论】:
标签: sql database teradata varchar sqldatatypes