14

binary(10)vs 和有什么不一样 char(10)character set binary

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

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

有什么需要注意的地方吗?

4

1 回答 1

14

没有区别。

但是,如果您要存储字符串,则需要注意。

如果您只想存储字节数组或其他二进制数据(例如流或文件),请使用二进制类型,因为这就是它们的用途。

引用MySQL 手册

在、或列CHARACTER SET binary的定义中使用会使该列被视为二进制数据类型。例如,下面的定义对是等价的:CHARVARCHARTEXT

CHAR(10) CHARACTER SET binary
BINARY(10)

VARCHAR(10) CHARACTER SET binary
VARBINARY(10)

TEXT CHARACTER SET binary
BLOB

所以,技术上没有区别。

但是,在存储字符串时,必须使用字符集将其从字符串转换为字节值。决定是在 MySQL 服务器之前自己执行此操作,还是让 MySQL 为您执行此操作。MySQL 将通过将字符串转换为BINARY使用 BIN 字符集来执行。

如果您想以另一种格式存储编码,假设您有一个业务需求,即每个字符必须使用 4 个字节(默认情况下 MySQL 不这样做),然后您可以使用CHARACTER SET BINARY文本列并执行字符自己设置编码。

MySQL 手册中的 The BINARYand VARBINARYTypes也值得一读,因为它详细介绍了诸如填充之类的重要信息。

摘要: 没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用字符串保存字符串的数据类型中是合乎逻辑的CHARACTER SET BINARY,并将字节数组/流等存储在BINARY无法通过字符集转换数据来表示的字段中。

于 2013-03-11T10:00:31.370 回答