整数类型
除特别说明外,MySQL兼容性B模式中的数据类型精度、标度、位数大小等默认不支持用浮点型数值定义,建议使用合法的整型数值定义。
整数类型公共差异说明:
GaussDB数据库和MySQL数据库整数类型具体差异请参见表1。
表1 整数类型 | MySQL数据库 | GaussDB数据库 |
| BOOL | 支持,存在差异 |
| BOOLEAN | 支持,存在差异 |
| TINYINT[(M)] [UNSIGNED] | 支持,存在差异 |
| SMALLINT[(M)] [UNSIGNED] | 支持,存在差异 |
| MEDIUMINT[(M)] [UNSIGNED] | 支持,存在差异 |
| INT[(M)] [UNSIGNED] | 支持,存在差异 |
| INTEGER[(M)] [UNSIGNED] | 支持,存在差异 |
| BIGINT[(M)] [UNSIGNED] | 支持,存在差异 |
任意精度类型
表2 任意精度类型 | MySQL数据库 | GaussDB数据库 | 差异 |
| DECIMAL[(M[,D])] | 支持,存在差异 | - 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。
- 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。
- 输入格式:当字符串入参全部被截断时不会报错,如“@123”;只有被部分截断时才会报错,如“12@3”。
|
| NUMERIC[(M[,D])] | 支持,存在差异 |
| DEC[(M[,D])] | 支持,存在差异 |
| FIXED[(M[,D])] | 不支持 | - |
浮点类型
表3 浮点类型 | MySQL数据库 | GaussDB数据库 | 差异 |
| FLOAT[(M,D)] | 支持,存在差异 | - 分区表支持:FLOAT数据类型不支持KEY键值分区策略分区表。
- 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。
- 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。
- 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
|
| FLOAT(p) | 支持,存在差异 | - 分区表支持:FLOAT数据类型不支持KEY键值分区策略分区表。
- 操作符:数值类型使用^操作符,与MySQL不一致,GaussDB中^操作符为取指数运算。
- 取值范围:定义精度p时,仅支持使用合法的整型数据类型。
- 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
|
| DOUBLE[(M,D)] | 支持,存在差异 | - 分区表支持:DOUBLE数据类型不支持KEY键值分区策略分区表。
- 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。
- 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。
- 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
|
| DOUBLE PRECISION[(M,D)] | 支持,存在差异 | - 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。
- 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。
- 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
|
| REAL[(M,D)] | 支持,存在差异 | - 分区表支持:REAL数据类型不支持KEY键值分区策略分区表。
- 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。
- 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。
- 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
|
序列整数
表4 序列整数 | MySQL数据库 | GaussDB数据库 | 差异 |
| SERIAL | 支持,存在差异 | 规格上与MySQL的差异如下: CREATE TABLE test(f1 serial, f2 CHAR(20)); - 类型定义的差异,MySQL的serial是映射到BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,GaussDB的serial是映射到INTEGER NOT NULL DEFAULT nextval('test_f1_seq'::regclass)。如:
-- MySQL serial的定义:
mysql> SHOW CREATE TABLE test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`f1` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`f2` char(20) DEFAULT NULL,
UNIQUE KEY `f1` (`f1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
-- GaussDB serial的定义
gaussdb=# \d+ test
Table "public.test"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------------+---------------------------------------------------+----------+--------------+-------------
f1 | integer | not null default nextval('test_f1_seq'::regclass) | plain | |
f2 | character(20) | | extended | |
Has OIDs: no
Options: orientation=row, compression=no, storage_type=USTORE - INSERT场景下serial类型DEFAULT值的差异。如:
-- MySQL插入serial的DEFAULT值
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test VALUES(10, 'aaaa');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 10 | aaaa |
| 11 | aaaa |
+----+------+
3 rows in set (0.00 sec)
-- GaussDB插入serial的DEFAULT值
gaussdb=# INSERT INTO test VALUES(DEFAULT, 'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(10, 'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(DEFAULT, 'aaaa');
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
1 | aaaa
2 | aaaa
10 | aaaa
(3 rows) - REPLACE场景下serial类型引用列的差异。如:
-- MySQL插入serial引用列的值
mysql> REPLACE INTO test VALUES(f1, 'aaaa');
Query OK, 1 row affected (0.00 sec)
mysql> REPLACE INTO test VALUES(f1, 'bbbb');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 2 | bbbb |
+----+------+
2 rows in set (0.00 sec)
-- GaussDB插入serial引用列的值
gaussdb=# REPLACE INTO test VALUES(f1, 'aaaa');
REPLACE 0 1
gaussdb=# REPLACE INTO test VALUES(f1, 'bbbb');
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
0 | aaaa
0 | bbbb
(2 rows) |