binary(10)
与char(10)character set binary
之间的区别是什么?
varbinary(10)
vs varchar(10)character set binary
?
它们是所有 MySQL引擎中的同义词吗?
有什么值得注意的吗?
答案 0 :(得分:10)
没有区别。
但是,如果您要存储字符串,则需要注意。
如果您只想存储字节数组或其他二进制数据(如流或文件),请使用二进制类型,因为它就是它们的用途。
来自MySQL manual:
的引用在CHAR,VARCHAR的定义中使用CHARACTER SET二进制文件, 或TEXT列使列被视为二进制数据类型。 例如,以下两对定义是等效的:
CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB
所以,技术上没有区别。
但是,在存储字符串时,必须使用字符集将字符串转换为字节值。决定是在MySQL服务器之前自己做这件事,还是让你做到为你做的事情。 MySQL将通过使用BIN字符集将字符串转换为BINARY来执行。
如果您想以其他格式存储编码,假设您有一个业务要求,即每个字符必须使用4个字节(默认情况下MySQL不会这样做)您可以使用“CHARACTER SET BINARY”到文本列并自己执行字符集编码。
同样值得阅读MySQL手册中的The BINARY and VARBINARY Types,因为这会详细说明填充等重要信息。
<强>要点:强> 没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用“CHARACTER SET BINARY”保存字符串的数据类型中,并在BINARY字段中存储字节数组/流等,通过字符集转换数据无法表示