我创建了以下测试表:
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
VARBINARY
[正如String Data Type Syntax上的MySQL手册页所述,VARBINARY
等效于VARCHAR CHARACTER SET binary
,而VARCHAR BINARY
等效于VARCHAR CHARACTER SET latin1 COLLATE latin1_bin
(或具有相应二进制排序规则的某些其他非二进制字符集;这取决于上表设置):