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