更新时间:2024-12-06 GMT+08:00
分享

数值数据类型

除特别说明外,MySQL兼容性M-Compatibility模式中的数据类型精度、标度、位数大小等默认不支持用浮点型数值定义,建议使用合法的整型数值定义。

表1 整数类型

MySQL数据库

GaussDB数据库

差异

BOOL

支持,存在差异

输出格式:GaussDB中SELECT TRUE/FALSE输出结果为t/f,MySQL为1/0。

MySQL:BOOL/BOOLEAN类型实际映射为TINYINT类型。

BOOLEAN

支持,存在差异

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

输入格式:
  • MySQL:

    整型类型对于类似“1.2.3.4.5”有多个小数点的字符串形式输入,在宽松模式下MySQL会发生错误解析,抛出WARNING并插表成功,例如将“1.2.3.4.5”插入表后值为12。

  • GaussDB:

    整型类型对于类似“1.2.3.4.5”有多个小数点的的字符串形式输入,在宽松模式下,会将第二个小数点后的字符当作非法字符全部截断,抛出WARNING并插表成功,例如将“1.2.3.4.5”插入表后值为1,“1.6.3.4.5”插入表后值为2。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

MySQL存储MEDIUMINT数据需要3字节。
  • 带符号的范围是-8,388,608 ~ +8,388,607。
  • 无符号的范围是0 ~ +16,777,215。
GaussDB映射为INT类型,存储需要4字节,通过边界值判断限制取值范围。
  • 带符号的范围是-8,388,608 ~ +8,388,607。
  • 无符号的范围是0 ~ +16,777,215。

其他差异请参见表格下方说明中的内容。

INT[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

输入格式:
  • MySQL:

    整型类型对于类似“1.2.3.4.5”有多个小数点的字符串形式输入,在宽松模式下MySQL会发生错误解析,抛出WARNING并插表成功,例如将“1.2.3.4.5”插入表后值为12。

  • GaussDB:

    整型类型对于类似“1.2.3.4.5”有多个小数点的的字符串形式输入,在宽松模式下,会将第二个小数点后的字符当作非法字符全部截断,抛出WARNING并插表成功,例如将“1.2.3.4.5”插入表后值为1,“1.6.3.4.5”插入表后值为2。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

支持,存在差异

示例:在UNION的CREATE TABLE AS场景中,GaussDB对于整型的CONST节点,取该整型的默认max_length,MySQL根据实际值计算max_length。

-- GaussDB场景
m_db=# CREATE TABLE test_int AS SELECT 1234567 UNION ALL SELECT '456789';
m_db=# DESC test_int;
  Field   |    Type     | Null | Key | Default | Extra 
----------+-------------+------+-----+---------+-------
 ?column? | varchar(11) | YES  |     |         | 
(1 row)
m_db=# DROP TABLE test_int;

-- MySQL场景
mysql> CREATE TABLE test_int AS SELECT 1234567 UNION ALL SELECT '456789';
mysql> DESC test_int;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| 1234567 | varchar(7) | NO   |     |         |       |
+---------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> DROP TABLE test_int;
表2 任意精度类型

MySQL数据库

GaussDB数据库

差异

DECIMAL[(M[,D])] [ZEROFILL]

支持,存在差异

MySQL DECIMAL用一个9*9的数组存储数值,整数部分和小数部分分开存储,超过该长度时优先截小数部分。GaussDB只会在整数位数超过81位时截断。

NUMERIC[(M[,D])] [ZEROFILL]

支持,存在差异

DEC[(M[,D])] [ZEROFILL]

支持,存在差异

FIXED[(M[,D])] [ZEROFILL]

支持,存在差异

表3 浮点类型

MySQL数据库

GaussDB数据库

差异

FLOAT[(M,D)] [ZEROFILL]

支持,存在差异

FLOAT数据类型不支持KEY键值分区策略分区表。

FLOAT数据类型不支持KEY键值分区策略分区表。

DOUBLE数据类型不支持KEY键值分区策略分区表。

DOUBLE PRECISION数据类型不支持KEY键值分区策略分区表。

REAL数据类型不支持KEY值分区策略分区表。

FLOAT(p) [ZEROFILL]

支持,存在差异

DOUBLE[(M,D)] [ZEROFILL]

支持,存在差异

DOUBLE PRECISION[(M,D)] [ZEROFILL]

支持,存在差异

REAL[(M,D)] [ZEROFILL]

支持,存在差异

驱动中FLOAT类型和DOUBLE类型带精度标度场景,数据输入超范围不支持报错。

相关文档