MySQL“二进制”vs“char字符集二进制”

时间:2013-03-11 09:04:21

标签: mysql debugging storage specifications column-types

binary(10)char(10)character set binary之间的区别是什么?

varbinary(10) vs varchar(10)character set binary

它们是所有 MySQL引擎中的同义词吗?

有什么值得注意的吗?

1 个答案:

答案 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字段中存储字节数组/流等,通过字符集转换数据无法表示