在 SQL Server 中binary type
,是否可以存储小于 1 个字节的内容?
binary [ ( n ) ] 长度为 n 字节的固定长度二进制数据,其中 n 是 1 到 8,000 之间的值。存储大小为 n 字节。
例如,如果我有 8 列用于用户首选项,我是否可以将它们存储为 8 个单独的列,以获得一个字节的组合数据大小?或者这会占用8个字节。是否有任何其他数据库支持bytes
可能小于一个字节的对象(或者可以与其他字节/二进制列打包?)
在 SQL Server 二进制类型中,是否可以存储小于 1 个字节的内容?
例如,如果我有 8 列用于用户首选项,我是否可以将它们存储为 8 个单独的列,以获得一个字节的组合数据大小?
是的,是的。
SQL Server 会自动将多列压缩bit
为一个字节:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-ver15
SQL Server 数据库引擎优化
bit
列的存储。如果表中有 8 个或更少的bit
列,则这些列存储为 1 个字节。如果有 9 到 16 位列,则这些列存储为 2 个字节,依此类推。字符串值
'TRUE'
和'FALSE'
可以转换为位值:'TRUE'
转换为1
和'FALSE'
转换为0
。转换为
bit
将任何非零值提升为1
。
我个人建议不要使用'TRUE'
和'FALSE'
字符串值到bit
列值的隐式转换,原因我不会讨论(我确实感叹bit
T-SQL 的语法中缺少“ -literal”,尽管您总是可以使用1
and 0
)。
是否有任何其他数据库支持可能小于一个字节的字节对象(或者可以与其他字节/二进制列打包?)
(请注意,SQL语言确实有一个内置的 nullabe-boolean
类型,用于表示子句中的表达式EXISTS
和谓词的中间结果WHERE
,但 SQL 规范不要求实现支持boolean
作为列类型 -这还没有SQL 规范作者需要一个耳光的另一个原因)。
众所周知,Oracle 仍然不支持任何boolean
列类型——这就是为什么您看到价值数十亿美元的生产数据库使用char(1)
来存储'Y'
和'N'
.
PostgreSQL 支持boolean
columns,但他们的文档没有说明它是否会压缩位域列。
MySQL 从 5.0.3 版开始支持bit
和bit(n)
. 旧版本支持boolean
列 - 尽管它将boolean
关键字转换为tinyint(1)
. 但是,MySQL 的文档没有说明是否将多个单位列压缩为多个字节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句