MySQL:两位数 0...53 - 使用 TINYINT(2) 或其他方法?

标签 mysql tinyint

我需要在 MySQL TABLE 中存储一个字段,该字段只能包含 0 到 53 之间的数字。这些数字永远不会小于 0 或大于 53。什么能提供更好的性能并且是存储这些的最有效方法?

TINYINT(2)
TINYINT(2) UNSIGNED

或者其他方法?谢谢!

最佳答案

我会选择 TINYINT UNSIGNED,因为它是一个基本类型并且 MySQL 知道如何有效地处理它。 [0-53] 在 6 位范围内:以某些特殊结构和随之而来的开销为代价来节省 2 位可能不是一个好主意。

Unsigned 因为(取决于读取数据的语言)您想要处理正数。在您使用的语言中,有符号 值可能有一些不同(例如右移位,如果值被处理,它将从左向右扩展符号位)。这取决于您的需求和操作。

至于 CPU,数据总线(通常)是 32 或 64 位。例如,使用 32 位而不是 8 位可能在性能方面具有一些优势,但是

  • 显然,每个值占用的空间多 4 倍
  • 在性能方面,当检索多行数据时,MySQL 会优化传输(它不会一次返回一个字节),因此应该不会有太大差异。

关于MySQL:两位数 0...53 - 使用 TINYINT(2) 或其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937259/

相关文章:

php - php mail() 是群发邮件的好选择吗?

mysql - sqoop merge-key 创建多个部分文件而不是一个不符合使用 merge-key 目的的文件

java - JDBC 准备语句 UTF-8

php - MySQL TinyInt 值不会更新

mysql - 将 tinyint 默认值更改为 1 mysql

c# - tinyint 的精致问题

SQL:如果我的最大值是 255,使用 tinyint 而不是 Integer 是否有效?

php - 从下拉菜单插入到 MySql

mysql - Laravel 3 - Eloquent save() 一遍又一遍地保存错误的值

mysql - 在MYSQL中将文本转换为tinyint