binary(10)
vs 和有什么不一样 char(10)character set binary
?
和varbinary(10)
vs varchar(10)character set binary
?
它们在所有MySQL 引擎中都是同义词吗?
有什么需要注意的地方吗?
binary(10)
vs 和有什么不一样 char(10)character set binary
?
和varbinary(10)
vs varchar(10)character set binary
?
它们在所有MySQL 引擎中都是同义词吗?
有什么需要注意的地方吗?
没有区别。
但是,如果您要存储字符串,则需要注意。
如果您只想存储字节数组或其他二进制数据(例如流或文件),请使用二进制类型,因为这就是它们的用途。
引用MySQL 手册:
在、或列
CHARACTER SET binary
的定义中使用会使该列被视为二进制数据类型。例如,下面的定义对是等价的:CHAR
VARCHAR
TEXT
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 BINARY
and VARBINARY
Types也值得一读,因为它详细介绍了诸如填充之类的重要信息。
摘要:
没有技术差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用字符串保存字符串的数据类型中是合乎逻辑的CHARACTER SET BINARY
,并将字节数组/流等存储在BINARY
无法通过字符集转换数据来表示的字段中。