binary(10)
vs char(10)character set binary
有什么区别?
还有varbinary(10)
vs varchar(10)字符集二进制
?
它们在所有 MySQL 引擎中是同义词吗?
有什么需要注意的地方吗?
最佳答案
没有区别。
但是,如果您存储的是字符串,则需要注意。
如果您只想存储字节数组或其他二进制数据(例如流或文件),那么请使用二进制类型,因为这正是它们的用途。
引自MySQL manual :
The use of
CHARACTER SET binary
in the definition of aCHAR
,VARCHAR
, orTEXT
column causes the column to be treated as a binary data type. For example, the following pairs of definitions are equivalent:CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB
因此,从技术上讲没有区别。
但是,在存储字符串时,必须使用字符集将其从字符串转换为字节值。决定是在 MySQL 服务器之前自己做这件事,还是让 MySQL 为你做。 MySQL 将通过使用 BIN 字符集将字符串转换为 BINARY
来执行。
如果你想以另一种格式存储编码,假设你有一个业务需求,要求每个字符必须使用 4 个字节(MySQL 默认不这样做),你可以使用 CHARACTER SET BINARY
到文本列并自己执行字符集编码。
同样值得一读The BINARY
and VARBINARY
Types来自 MySQL 手册,因为它详细说明了诸如填充之类的重要信息。
总结:
没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用 CHARACTER SET BINARY
保存字符串的数据类型中并将字节数组/流等存储在 BINARY
字段中是合乎逻辑的不能通过字符集转换数据来表示。
关于MySQL "binary"与 "char character set binary",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334607/