MySQL中的Binary(16)和VarBinary(16)之间是否存在差异?

时间:2009-08-18 16:32:08

标签: mysql nhibernate

当tring表示Guids时,Nhibernate似乎与varbinary(16)有问题。我原以为varbinary(16)和binary(16)等同于同样的东西。

3 个答案:

答案 0 :(得分:4)

二进制(16)是固定长度。它总是为每一行使用16个字节的存储空间,用0x00或0x20填充任何额外的字节(取决于MySQL的版本)并在SELECT上剥离它们。 varbinary使用可变数量的空间 - 无论在该行上存储数据都需要。

如果您的数据总是精确到16个字节,则没有区别。实际上,对于一个很小的列,可能没有任何区别。

答案 1 :(得分:0)

MySQL参考手册:The BINARY and VARBINARY Types

  

“当存储BINARY值时,它们右键填充pad值到指定长度...对于VARBINARY,插入时没有填充,并且select上没有字节被剥离。”

答案 2 :(得分:0)

为了扩展这一点,VAR_TYPE_和 TYPE 之间的区别(其中 TYPE 类似于CHAR,INT,BINARY等)是非VAR “version”将填充到您指定的全长(如有必要)。 VAR-不会被填充,这使它适合存储文本注释等。