首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server数据类型:将8位无符号数字存储为INT还是CHAR(8)?

SQL Server数据类型:将8位无符号数字存储为INT还是CHAR(8)?
EN

Stack Overflow用户
提问于 2010-10-29 17:35:31
回答 4查看 12.5K关注 0票数 1

我觉得标题说明了一切。将8位无符号数字存储为Int或char(8)类型更好(速度更快,根据内存和磁盘节省空间)?当我以后使用固定字符长度时,当数字变成9位数时,我会遇到麻烦吗?

背景信息:我想存储TAC%s

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-29 17:40:21

如果是数字,则将其存储为数字。

整数使用4 bytes存储,给出了它们的范围:

-2^31 (-2,147,483,648)到2^31-1 (2,147,483,647)

因此,适合您的需求。

char[8]将存储为8 bytes,因此存储空间翻了一番,当然,将来还需要扩展(将近1000万条记录从8个字符转换为9个字符需要时间,并且可能需要在此期间使数据库脱机)。

因此,从存储、速度、内存和磁盘使用(所有这些都与数据类型使用的字节数有关)、可读性、语义和未来校对方面,int轻松取胜。

更新

既然你已经澄清了你是在而不是存储数字,我想说的是你将不得不使用char来保存前导零。

至于未来扩展的问题-由于char是固定长度的字段,从char[8]更改为char[9]不会丢失信息。但是,我不确定是否会在右侧或左侧添加额外的字符(尽管这可能是未知的)。您将必须进行测试,一旦字段扩展,您将需要确保原始数据已被保留。

一种更好的方法可能是创建一个新的char[9]字段,将所有char[8]数据迁移到其中(以保持可靠和一致),然后删除char[8]字段并将新字段重命名为原始名称。当然,这会破坏表上的所有统计信息(但也会直接扩展字段)。

票数 2
EN

Stack Overflow用户

发布于 2010-10-29 17:46:59

鉴于TAC可以具有前导零,并且它们实际上是一个不透明的标识符,并且永远不会使用计算,因此请使用char列。

在确定数据类型建模正确之前,不要开始优化空间。

编辑

但为了避免垃圾,请确保您还应用了CHECK约束。例如,如果是8位数字,则添加

代码语言:javascript
复制
CONSTRAINT CK_Only8Digits CHECK (not TAC like '%[^0-9]%' and LEN(RTRIM(TAC)) = 8)
票数 5
EN

Stack Overflow用户

发布于 2010-10-30 05:19:24

int比char占用更少的内存空间并提供更快的索引。

如果您需要拆分这些数字--搜索数字3-4是"02“或类似数字的所有内容-- char会更简单,也可能更快。

我猜你没有在他们身上做算术。您不需要将两个TAC相加在一起,也不需要计算一组记录的平均TAC或类似的东西。如果你是,这将是一个使用int的扣篮论点。

如果它们有前导零,那么使用char可能更容易,这样你就不必总是用零填充数字到正确的长度。

如果以上这些都不适用,那就没什么关系了。我可能会用char。我想不出一个令人信服的理由去走这两条路。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4050647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档