MySQL中“ VARCHAR BINARY”和“ VARBINARY”有什么区别?

问题描述 投票:5回答:2

我创建了以下测试表:

CREATE TABLE t (
   a VARCHAR(32) BINARY,
   b VARBINARY(32)
);

INSERT INTO t (a, b) VALUES ( 'test    ', 'test    ');
INSERT INTO t (a, b) VALUES ( 'test    \0', 'test    \0');

但是此查询表明两种类型之间没有区别:

SELECT a, LENGTH(a), HEX(a), b, LENGTH(b), HEX(b) FROM t;

a          LENGTH(a)  HEX(a)              b          LENGTH(b)  HEX(b)              
---------  ---------  ------------------  ---------  ---------  --------------------
test               8  7465737420202020    test               8  7465737420202020    
test               9  746573742020202000  test               9  746573742020202000  
mysql collation binary-data
2个回答
6
投票

这里是我可以通过阅读documentation来找到的区别:

VARCHAR BINARY

  • BINARY属性导致使用列字符集的二进制排序规则,并且列本身包含非二进制字符串,而不是二进制字节字符串。
  • 当存储BINARY值时,使用填充值将它们右填充到指定的长度。
  • 如果计划使用BINARY数据类型存储二进制数据,并且要求检索的值与存储的值完全相同,则应仔细考虑上述填充和剥离特性。

  • VARBINARY

  • 如果未启用严格的SQL模式,而您尝试分配的值超过了列的最大长度,则该值将被截断以适合并生成警告。
  • 在插入时没有填充,并且在选择时没有字节被剥离。所有字节在比较中都是有效的。
  • 当检索的值必须与为存储而没有填充而指定的值相同时,最好使用利用率。

0
投票

[正如String Data Type Syntax上的MySQL手册页所述,VARBINARY等效于VARCHAR CHARACTER SET binary,而VARCHAR BINARY等效于VARCHAR CHARACTER SET latin1 COLLATE latin1_bin(或具有相应二进制排序规则的某些其他非二进制字符集;这取决于上表设置):

© www.soinside.com 2019 - 2024. All rights reserved.