当前位置:  开发笔记 > 后端 > 正文

在MySQL中签名或未签名

如何解决《在MySQL中签名或未签名》经验,为你挑选了4个好方法。

我想知道在MySQL中定义一些整数字段时使用UNSIGNED标志会有什么积极影响吗?它是否使查询更快或数据库更小?或者,如果我担心上限,我应该只打扰它吗?



1> Kevin Loney..:

根据MySQL 5.1手册的10.2节:

在非严格模式下,当将超出范围的值分配给整数列时,MySQL会存储表示列数据类型范围的相应端点的值.如果将256存储到TINYINT或TINYINT UNSIGNED列中,MySQL将分别存储127或255.当浮点或定点列分配超过由指定(或默认)隐含的范围精度和标度的MySQL存储表示该范围的相应的端点的值.

因此,只有在关注上限时才使用UNSIGNED.同时添加UNSIGNED不会影响列的大小,只是表示数字的表示方式.


此外,对于仅存储无符号值的情况,索引的性能也有所提高.就像@ kevin-loney所说,它可以节省索引上限值的时间.请参阅[我写过的文章](http://rakesh.sankar-b.com/2010/08/25/mysql-unsigned-int-to-signed-int-performance-tips-index/)关于使用签名的无符号类型.
你是王,王,布!你刚刚通过以上管理层为我节省了大量的脑力.:-) 谢谢!

2> GeoffreyF67..:

除非你试图从价值中获得最大的收益并且不需要负值,否则无关紧要.

例如,假设你想存储0-255.

您可以使用tinyint,但仅当您将其用作未签名时才使用.

我见过很多数据库,人们不打算像这样优化并最终得到一些相当大的表,因为他们只是一直使用INT.

不过,如果你在讨论int vs unsigned int,那么根本就没有性能影响或空间效应.

从标准的角度来看,我总是使用无符号,只有当我知道我需要负值时才使用签名.



3> 小智..:

在性能或存储方面,它绝对是一回事.

作为一般规则,请使用更适合您的方法:如果您只需要正值,则将值存储为UNSIGNED,否则,将其设为默认值[SIGNED].

为PRIMARY AUTOINCREMENT列设置SIGNED值时会出现一个问题:自动生成的数字的计数从1开始(不是最小的负数),可能的值将提前结束,因为您将只使用一半的值.因此,在这种情况下(PRIMARY + AUTOINCREMENT列),最好存储为UNSIGNED.



4> ʞɔıu..:

当列仅包含正数时,请使用无符号.

它不会影响列上的任何I/O性能,因为它仍将占用完全相同的空间量.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有