【发布时间】:2013-03-11 09:04:21
【问题描述】:
binary(10) 与 char(10)character set binary 有什么区别?
还有varbinary(10) 和varchar(10)character set binary?
它们在所有 MySQL 引擎中是同义词吗?
有什么需要注意的地方吗?
【问题讨论】:
标签: mysql debugging storage specifications column-types
binary(10) 与 char(10)character set binary 有什么区别?
还有varbinary(10) 和varchar(10)character set binary?
它们在所有 MySQL 引擎中是同义词吗?
有什么需要注意的地方吗?
【问题讨论】:
标签: mysql debugging storage specifications column-types
没有区别。
但是,如果您要存储字符串,则需要注意。
如果您只想存储字节数组或其他二进制数据,例如流或文件,请使用二进制类型,因为这就是它们的用途。
引用自MySQL manual:
在
CHAR、VARCHAR的定义中使用CHARACTER SET binary, 或TEXT列导致该列被视为二进制数据类型。 例如,下面的定义对是等价的: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文本列并自己执行字符集编码。
还值得阅读 MySQL 手册中的 The BINARY and VARBINARY Types,因为它详细介绍了重要信息,例如填充。
总结:
没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用CHARACTER SET BINARY 保存字符串的数据类型中并将字节数组/流等存储在BINARY 字段中是合乎逻辑的,这些字段不能通过通过字符集转换数据来表示.
【讨论】:
char character set binary 不也是为字节数组设计的吗?