表1 二进制数据类型
MySQL数据库 |
GaussDB数据库 |
差异 |
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 |
支持,存在差异 |
- 取值范围:只支持不超过1G字节长度,MySQL支持4G-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
----------------------
80002020202020202020
(1 row)
m_db=# SELECT * FROM test WHERE hex(a) = 80000000000000000000;
a
---
(0 rows)
m_db=# DROP TABLE test;
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> DROP TABLE test;
Query OK, 0 rows affected (0.00 sec)