更新时间:2024-05-14 GMT+08:00
分享

二进制数据类型

表1 二进制数据类型

序号

MySQL数据库

GaussDB数据库

差异

1

BINARY[(M)]

支持,存在差异

  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
    • 插入字符串长度小于目标长度时,GaussDB填充符是0x20,MySQL是0x00。
  • 字符集:默认字符集为数据库初始化字符集,MySQL默认类型字符集为BINARY字符集。
  • 输出格式:
    • JDBC协议输出时BINARY类型的末尾空格显示为空格,MySQL末尾空格显示为\x00。
    • 宽松模式下, BINARY类型面对输入超过n的字节数的字符输入(例如中文字符), 会将超限的整个字符截断。MySQL中会将超限的整个字符的前几位满足n范围内的字节信息保留,但输出时字符信息显示乱码。
    说明:

    GaussDB中,由于BINARY类型填充符和\0j截断与MySQL的差异,在操作符比较计算,字符串相关系统函数计算,索引匹配,数据导入导出等场景下与MySQL的表现会存在差异。差异场景请见本节示例。

2

VARBINARY(M)

支持,存在差异

  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
  • 字符集:默认字符集为数据库初始化字符集,MySQL默认类型字符集为BINARY字符集。
  • 输出格式:JDBC协议输出时BINARY类型的末尾空格显示为空格,MySQL末尾空格显示为\x00。

3

TINYBLOB

支持,存在差异

  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
  • 主键:MySQL中TINYBLOB类型不支持主键,GaussDB支持。
  • 索引:MySQL中TINYBLOB类型不支持除前缀索引外其他索引方法,GaussDB支持。

4

BLOB

支持,存在差异

  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
  • 主键:MySQL中BLOB类型不支持主键,GaussDB支持。
  • 索引:MySQL中BLOB类型不支持除前缀索引外其他索引方法,GaussDB支持。

5

MEDIUMBLOB

支持,存在差异

  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
  • 主键:MySQL中MEDIUMBLOB类型不支持主键,GaussDB支持。
  • 索引:MySQL中MEDIUMBLOB类型不支持除前缀索引外其他索引方法,GaussDB支持。

6

LONGBLOB

支持,存在差异

  • 取值范围:只支持不超过1G字节长度,MySQL支持4G-1字节长度。
  • 输入格式:
    • GaussDB不支持转义字符输入,MySQL支持。
    • 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。
    • 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。
  • 主键:MySQL中LONGBLOB类型不支持主键,GaussDB支持。
  • 索引:MySQL中LONGBLOB类型不支持除前缀索引外其他索引方法,GaussDB支持。

7

BIT[(M)]

支持,存在差异

  • 输出格式:所有输出按照二进制字符串形式输出。MySQL中根据ASCII码表转义,无法转义的输出为空。

示例:

-- GaussDB场景
m_db=# create table test(a binary(10));
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));
CREATE TABLE
m_db=# INSERT INTO test2 VALUES(0x80008000);
INSERT 0 1
m_db=# SELECT hex(a) FROM test2;
         hex
----------------------
 80202020202020202020
(1 row)

-- 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)
分享:

    相关文档

    相关产品