首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mysql中将十进制值存储为varchar好吗?

在mysql中将十进制值存储为varchar好吗?
EN

Stack Overflow用户
提问于 2013-04-16 02:52:08
回答 3查看 13.1K关注 0票数 1

我必须存储用户信用,这可以是十进制格式,如(10.99,0.99等)。现在,我将列字段作为varchar(100)。

如果我使用decimal而不是varchar会怎么样?它会提高性能吗??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-16 03:00:32

简短的答案是:不,它会影响性能。

更长的答案是: VARCHAR字段是可变长度的,这意味着数据库块的格式不能预先考虑其中填充的数据的大小。当然,有一个字段的最大长度,但除此之外,你的情况更糟。

另一方面,读取VARCHAR,然后将其解释为适合浮点类型,这将耗费您的成本。它还引入了新的问题可能性。尝试获取所有占"11.99“的小数。希望您带对小数位数,因为在VARCHAR中"11.99“!= "11.990”。

然后是索引。通常,没有人对小数字段进行索引,但是如果您这样做了,那么VARCHAR字段上的索引将需要更多的空间。

总而言之,将某些内容保存在非特定字段类型中不是一个好主意。在DB结构中,通常被认为是尽可能具体的最佳实践。

票数 10
EN

Stack Overflow用户

发布于 2013-05-30 02:58:22

令人惊讶的是,您可以通过这种方式节省磁盘空间(从而节省IO时间)。这真的取决于十进制值是什么,以及它们是否会保持在这个范围内,你应该在做之前绝对检查一下。

代码语言:javascript
复制
select 
  sum(1+len(cast(Cast(your_decimal_value as real) as varchar(50)))) as size_as_varchar,
  size_of_your_decimal_type_in_bytes*count(*) as size_as_decimal
from your_table

如果size_as_varchar比size_as_decimal低很多,那么您可能会看到IO限制查询的性能提升。铸造CPU的成本可能会抵消收益。

那么,你应该这样做吗?这取决于你的服务器,你的数据,你的查询需要转换多少值,以及你的老板对偏离最佳实践的容忍度……但答案可能是否定的。如果您需要这样做,您应该使用提供行级压缩的数据库,而不是做一些近似行级压缩的麻烦事情。

票数 3
EN

Stack Overflow用户

发布于 2013-04-16 03:01:34

在某些情况下,您可能希望将看起来像数值的内容存储为字符串。例如,在美国,5位数字的邮政编码看起来很像数字。但是,前导零很重要。因此,它们实际上是标签而不是数字。这是显而易见的;邮政编码应该以字符串的形式存储。

在大多数其他情况下,您希望将数字存储为数字。名为"user credits“的字段表示您正在对该字段进行加法和减法。所以,这也是不需要动脑筋的。如果看起来像一个数字,走起来像一个数字,叫起来像一个数字。。。将其存储为数字。

MySQL确实让这个选择有点混乱,因为它会自动将字符串转换为数字,即使字符串的数字部分后面有无关的字符。

如果您希望精确存储第二个小数点,则使用定点数据类型(如DECIMAL(5,2))而不是浮点类型(如float)。

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

https://stackoverflow.com/questions/16022668

复制
相关文章

相似问题

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