近期测试发现ck针对不同数据类型对null值的处理和Oracle、MySQL等有些区别,记录一下。
- 首先创建一张测试表,主要包含数值型、字符型和日期型:
CREATE TABLE test.test_220507 ( `id` Int8, `col_name` String, `col_Int8` Int8, `col_Int16` Int16, `col_Int32` Int32, `col_int64` Int64, `col_UInt8` UInt8, `col_UInt16` UInt16, `col_UInt32` UInt32, `col_UInt64` UInt64, `dt_Date` Date, `dt_DateTime` DateTime, `c_uuid` UUID, `col_decimal` Decimal(5, 2) ) ENGINE = MergeTree PRIMARY KEY id ORDER BY id
复制
- 看一下录入数据的最终结果
-
从以上结果可以看出:
id=5:UIntxx几个字段,因为填入-1超出保存范围,全部自动替换成了数据类型的最大值,datetime字段填入’2022-05-07’则自动补全时分秒;
id=6:数值型字段因为录入的是10,符合要求正常显示,col_decimal字段只能录入两位最大精度,超出范围会报错(例如录入10.3333在这里会报错);
id=7:数值型字段插入空值,全部自动用0补全。Date字段自动补全’1970-01-01’,DateTime字段自动补全’1970-01-01 08:00:00’;
id=8:col_name字段录入空字符串,但是因为字段属性非空,查询时不能用 is null 筛选。 -
下面就String类型录入空值特殊说明一下:
1、select * from test_220507 t where t.col_name is null; 查询不出结果,换成 =’'也不行 。
2、ck中String类型字段将空值保存成空字符串,没办法用where条件筛选,只能修改字段属性:
alter table test_220507 modify column col_name Nullable(String);
复制
3、添加一行id=9的记录,除id字段全录入空值,对比一下col_name字段:
由此可以看出,字段调整为Nullable属性之后,原有字段空字符串不会变,再录入空值会保存为null,取数SQL也不一样:
(1)
(2)
- 总结:通过以上测试可以看出,若是一个字段如果会录入空值,设计表结构时就要提前设置允许为空,否则录入结果可能不符合预期,也很容易埋坑。
---------------------------------------完---------------------------------
最后修改时间:2022-05-07 22:07:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收!
❤️我们还会实时派发您的流量收益。
3年前

评论
相关阅读
Dash0 如何用 ClickHouse 构建可观测性解决方案
ClickHouseInc
71次阅读
2025-04-16 10:33:57
可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
SelectDB
42次阅读
2025-05-09 16:48:09
GBase 8c 配置大小写和中英文排序
ClickHouse周边
28次阅读
2025-04-15 09:50:04
据坊间传 ClickHouse 越“懒”越快:惰性物化(Lazy Materialization)正式登场
ClickHouseInc
27次阅读
2025-04-28 11:01:21
ClickHouse 用 AgentHouse 向你展示通过 MCP 集成 LLM 的可能性
ClickHouseInc
22次阅读
2025-04-29 09:47:37
ClickHouse 联合 Ruby Central 推出 Ruby Gem 下载分析服务
ClickHouseInc
10次阅读
2025-04-22 10:12:07
Clickhouse 迁移到 Doris 的最佳实践
数据极客圈
8次阅读
2025-05-09 10:07:41