Sql server SQL Server中的二进制类型
在SQL Server中,是否可以存储小于一个字节的内容 二进制[(n)]长度为n字节的固定长度二进制数据,其中n是从1到8000的值。存储大小为n字节 例如,如果我有8列作为用户首选项,我可以将它们存储为8个单独的列,组合数据大小为一个字节吗?或者这会占用8个字节。是否有其他数据库支持小于一个字节的Sql server SQL Server中的二进制类型,sql-server,binary,Sql Server,Binary,在SQL Server中,是否可以存储小于一个字节的内容 二进制[(n)]长度为n字节的固定长度二进制数据,其中n是从1到8000的值。存储大小为n字节 例如,如果我有8列作为用户首选项,我可以将它们存储为8个单独的列,组合数据大小为一个字节吗?或者这会占用8个字节。是否有其他数据库支持小于一个字节的bytes对象(或者可以与其他字节/二进制列打包) 在SQL Server二进制类型中,是否可以存储小于一个字节的内容? 例如,如果我有8列作为用户首选项,我可以将它们存储为8个单独的列,组合数据大
bytes
对象(或者可以与其他字节/二进制列打包)
在SQL Server二进制类型中,是否可以存储小于一个字节的内容?例如,如果我有8列作为用户首选项,我可以将它们存储为8个单独的列,组合数据大小为一个字节吗 是的,是的 SQL Server将自动将多个
位列压缩为一个字节:
SQL Server数据库引擎优化了bit
列的存储如果表中有8个或更少的位
列,则这些列存储为1字节。如果有9到16位的列,则这些列存储为2个字节,依此类推
字符串值'TRUE'
和'FALSE'
可以转换为位值:'TRUE'
转换为1
,'FALSE'
转换为0
转换为位
会将任何非零值提升为1
我个人建议不要使用'TRUE'
和'FALSE'
字符串值到位
列值的隐式转换,原因我将不一一赘述(我对t-SQL语法中缺少“位
-literal”表示遗憾,尽管您总是可以使用1
和0
)
是否有其他数据库支持小于一个字节的字节对象(或者可以与其他字节/二进制列打包)
(请注意,SQL语言确实有一个内置的nullabe-boolean
类型,用于表示表达式的中间结果,例如EXISTS
和WHERE
子句中的谓词,但SQL规范不要求实现将boolean
作为列类型支持,这一点尚不明确。)这就是为什么SQL规范的作者需要一记耳光的原因)
-这就是为什么您会看到数十亿美元的生产数据库使用char(1)
存储'Y'
和'N'
,但他们的文档并没有说明它是否会压缩位字段列
.旧版本支持boolean
列-尽管它将boolean
关键字转换为tinyint(1)
。但是,如果它将多个单位列压缩为多个字节。,对吗?@david542--这就是为什么你看到数十亿美元的生产数据库使用char(1)
--lol,我在mysql5.7中使用了TINYINT(1)
。@david542正确,表中的n
-许多位
列的存储要求是ceil(n/8)
。一般来说,您最不担心的是存储。模式的正确性应该是第一优先事项。位标志很难在查询中使用,并且无法直接优化—假设您需要基于它们编写tsql查询。对于用户首选项列,可能不太重要—但您无法预测未来的ne当然,还有更改或扩展选项时会发生什么。