数据库
首页 > 数据库> > MySQL中“VARCHAR BINARY”和“VARBINARY”之间有什么区别?

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

作者:互联网

我创建了以下测试表:

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  

解决方法:

以下是我能够找到阅读documentation的区别:

VARCHAR BINARY

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

VARBINARY

>如果未启用严格SQL模式并且您尝试分配超过列的最大长度的值,则会截断该值以适合并生成警告.
>插入时没有填充,选择时不会删除任何字节.所有字节在比较中都很重要.
>当检索到的值必须与没有填充的存储指定的值相同时,最好使用.

标签:mysql,collation,binary-data
来源: https://codeday.me/bug/20190623/1274987.html