2013-03-11 180 views

回答

9

没有区别。

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

如果你只想一个字节数组或其他存储二进制数据,如流或文件,然后使用二进制类型,这是他们都是为了。从MySQL manual

引用:

在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将通过使用BIN字符集将字符串强制转换为BINARY来执行。

如果你想以另一种格式存储编码,可以说你有一个业务需求,说你必须使用每个字符4个字节(MySQL默认不这样做),那么你可以使用“CHARACTER SET BINARY “转换为文本列并自己执行字符集编码。

这也是值得从MySQL手册,因为这细节的重要信息,如填充阅读The BINARY and VARBINARY Types

总结: 没有技术上的差异,因为一个是另一个的同义词。在我看来,将二进制字符串存储在通常使用“CHARACTER SET BINARY”存储字符串的数据类型中并将字节数组/流存储在BINARY字段中是不合逻辑的,这些字段不能通过字符集转换数据来表示。

+0

我正在存储字节数组。如果两个选项都是同义词,为什么你说*“使用二进制类型,因为它是为它设计的”*?是不是也为字节数组设计的“字符集二进制”? – Pacerier 2013-03-11 10:39:26

+0

@Pacerier对我来说确实是不好的措辞(我会在我的答案中更清楚地说明),charset set binary是二进制的同义词,所以在技术上没有区别。国际海事组织更容易理解存储二进制流(不能用字符集和排序规则表示)在二进制中是有意义的,如果你正在做自己的字符编码,将它存储在字符集CHARACTER SET BINARY – Steve 2013-03-11 11:06:36

+1

@Ic,顺便说一句,你知道这种行为是否是*官方*,还是引擎仍然允许自己执行? – Pacerier 2013-03-11 11:16:40