# 二进制数据类型
表1二进制数据类型 
| 数据类型         | 与MySQL的差异                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|
| BINARY\[(M)\]  | - 输入格式： - 输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。  - 插入字符串长度小于目标长度时，GaussDB填充符是0x20，MySQL是0x00。    - 字符集：默认字符集为数据库初始化字符集，MySQL默认类型字符集为BINARY字符集。  - 输出格式： - JDBC协议输出时BINARY类型的末尾空格显示为空格，MySQL末尾空格显示为\\x00。  - 宽松模式下，BINARY类型面对输入超过n的字节数的字符输入（例如中文字符），会将超限的整个字符截断。MySQL中会将超限的整个字符的前几位满足n范围内的字节信息保留，但输出时字符信息显示乱码。  - 在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。   说明： GaussDB中，由于BINARY类型填充符和\\0截断与MySQL的差异，在操作符比较计算，字符串相关系统函数计算，索引匹配，数据导入导出等场景下与MySQL的表现会存在差异。差异场景请见本节示例。    |
| VARBINARY(M) | - 输入格式：输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。    - 字符集：默认字符集为数据库初始化字符集，MySQL默认类型字符集为BINARY字符集。  - 输出格式： - JDBC协议输出时BINARY类型的末尾空格显示为空格，MySQL末尾空格显示为\\x00。  - 在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| TINYBLOB       | - 输入格式： - 默认值：创建表列时语法上允许设置默认值，MySQL不允许设置默认值。  - 输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。      - 主键：MySQL中TINYBLOB类型不支持主键，GaussDB支持。    - 索引：MySQL中TINYBLOB类型不支持除前缀索引外其他索引方法，GaussDB支持。  - 外键：MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列，GaussDB支持。  - 输出格式：在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。                                                                                                                                                                                                                                                                 |
| BLOB          | - 输入格式： - 默认值：创建表列时语法上允许设置默认值，MySQL不允许设置默认值。  - 输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。    - 主键：MySQL中BLOB类型不支持主键，GaussDB支持。    - 索引：MySQL中BLOB类型不支持除前缀索引外其他索引方法，GaussDB支持。  - 外键：MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列，GaussDB支持。  - 输出格式：在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。                                                                                                                                                                                                                                                                                                                                       |
| MEDIUMBLOB    | - 输入格式： - 默认值：创建表列时语法上允许设置默认值，MySQL不允许设置默认值。  - 输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。    - 主键：MySQL中MEDIUMBLOB类型不支持主键，GaussDB支持。    - 索引：MySQL中MEDIUMBLOB类型不支持除前缀索引外其他索引方法，GaussDB支持。  - 外键：MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列，GaussDB支持。  - 输出格式：在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。                                                                                                                                                                                                                                                                                                                        |
| LONGBLOB        | - 取值范围：只支持不超过1GB字节长度，MySQL支持4GB-1字节长度。  - 输入格式： - 默认值：创建表列时语法上允许设置默认值，MySQL不允许设置默认值。  - 输入二进制或十六进制字符串时，GaussDB输出为十六进制，MySQL中根据ASCII码表转义，无法转义的输出为空。      - 主键：MySQL中LONGBLOB类型不支持主键，GaussDB支持。    - 索引：MySQL中LONGBLOB类型不支持除前缀索引外其他索引方法，GaussDB支持。  - 外键：MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列，GaussDB支持。  - 输出格式：在MySQL 8.0以上版本，默认以0x开头形式返回，GaussDB以多个\\x形式返回。                                                                                                                                 |
| BIT\[(M)\]      | 输出格式： - 所有输出按照二进制字符串形式输出。MySQL中根据ASCII码表转义，无法转义的输出为空。  - 在MySQL 8.0以上版本，默认会开头补0，GaussDB不会补0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
示例：
```
-- GaussDB场景
m_db=# CREATE TABLE test(a BINARY(10)) DISTRIBUTE BY REPLICATION;
CREATE TABLE
m_db=# INSERT INTO test VALUES(0x8000);
INSERT 0 1
m_db=# SELECT hex(a) FROM test;
         hex
----------------------
 80202020202020202020
(1 row)
m_db=# SELECT * FROM test WHERE hex(a) = 80000000000000000000;
 a
---
(0 rows)
m_db=# CREATE TABLE test2(a BINARY(10)) DISTRIBUTE BY REPLICATION;
CREATE TABLE
m_db=# INSERT INTO test2 VALUES(0x80008000);
INSERT 0 1
m_db=# SELECT hex(a) FROM test2;
         hex
----------------------
 80202020202020202020
(1 row)
m_db=# DROP TABLE test;
DROP TABLE
m_db=# DROP TABLE test2;
DROP TABLE
-- MySQL场景
mysql> CREATE TABLE test(a BINARY(10));
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO test VALUES(0x8000);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT hex(a) FROM test;
+----------------------+
| hex(a)               |
+----------------------+
| 80000000000000000000 |
+----------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM test WHERE hex(a) = 80000000000000000000;
+------------+
| a          |
+------------+
| ▒           |
+------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE test2(a binary(10));
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO test2 VALUES(0x80008000);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT hex(a) FROM test2;
+----------------------+
| hex(a)               |
+----------------------+
| 80008000000000000000 |
+----------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE test;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP TABLE test2;
Query OK, 0 rows affected (0.00 sec)
```
