数值数据类型
整数类型
除特别说明外,MySQL兼容性MYSQL模式中的数据类型精度、标度、位数大小等默认不支持用浮点型数值定义,建议使用合法的整型数值定义。
- 输入格式:
- 操作符:
- +、-、*操作符
GaussDB:INT/INTEGER/SMALLINT/BIGINT在进行运算时,返回值为类型本身,不会向上提升类型,当返回值超范围时报错。
MySQL:支持提升类型到BIGINT后计算。
- |、&、^、~运算符
GaussDB:在类型所占用BIT位中计算;GaussDB中^表示指数运算,如需使用异或运算符,使用#替换。
MySQL:提升类型计算。
- <、<=、<=>、<>、=、>、>=
GaussDB:使用整数类型与字符串类型比较时,将字符串类型转换成整数类型后再进行比较。当字符串中包含小数点、字母等非数字部分时,会直接截断非整数部分进行比较;当字符串被全部被截断(如“@123”)或字符串为空时,字符串类型将转换成0后再与整数类型进行比较。
MySQL:使用整数类型与字符串类型比较时,将转换成浮点数类型后再进行比较。
- +、-、*操作符
- 负数显式类型转换:
MySQL:依据其对应的二进制将最高位替换成数值位计算结果,例如(-1)::uint4 = 4294967295。
- 其他差异:
- 聚集函数:
- variance:GaussDB表示样本方差,MySQL表示总体方差。
- stddev:GaussDB表示样本标准差,MySQL表示总体标准差。
- 显示宽度:
- 在为整型数字列指明宽度信息时,如果不同时指定ZEROFILL,则宽度信息在表结构描述中不显示。
- INSERT语句插入字符类型字段,GaussDB统一补齐0后插入。
- JOIN USING语句,涉及类型推导,MySQL默认第一张表列,GaussDB若结果为有符号类型则宽度信息失效,否则为第一张表字段宽度。
- greatest/least、ifnull/if、case when/decode,MySQL不补齐0,GaussDB在类型及宽度信息一致时补齐0。
- 作为函数/存储过程出入参、返回值时,MySQL支持功能、GaussDB语法不报错功能不支持。
GaussDB数据库和MySQL数据库整数类型具体差异请参见表1。
| MySQL数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| BOOL | 支持,存在差异 | MySQL:BOOL/BOOLEAN类型实际映射为TINYINT类型。 GaussDB:支持BOOL,其中:
使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。 |
| BOOLEAN | 支持,存在差异 | |
| TINYINT[(M)] [UNSIGNED] | 支持,存在差异 | 详情请参见整数类型公共差异说明。 |
| SMALLINT[(M)] [UNSIGNED] | 支持,存在差异 | 详情请参见整数类型公共差异说明。 |
| MEDIUMINT[(M)] [UNSIGNED] | 支持,存在差异 | MySQL存储MEDIUMINT数据需要3字节。
GaussDB映射为INT类型,存储需要4字节。
其他差异请参见整数类型公共差异说明。 |
| INT[(M)] [UNSIGNED] | 支持,存在差异 | 详情请参见整数类型公共差异说明。 |
| INTEGER[(M)] [UNSIGNED] | 支持,存在差异 | 详情请参见整数类型公共差异说明。 |
| BIGINT[(M)] [UNSIGNED] | 支持,存在差异 | 详情请参见整数类型公共差异说明。 |
因不同兼容性导致数据存在差异的,当该列上有索引,且使用该索引与创建该索引时的兼容性环境不同时,可能会导致该索引失效,需要reindex该索引。
任意精度类型
| MySQL数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| DECIMAL[(M[,D])] | 支持,存在差异 |
|
| NUMERIC[(M[,D])] | 支持,存在差异 | |
| DEC[(M[,D])] | 支持,存在差异 | |
| FIXED[(M[,D])] | 不支持 | - |
浮点类型
| MySQL数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| FLOAT[(M,D)] | 支持,存在差异 |
|
| FLOAT(p) | 支持,存在差异 |
|
| DOUBLE[(M,D)] | 支持,存在差异 |
|
| DOUBLE PRECISION[(M,D)] | 支持,存在差异 |
|
| REAL[(M,D)] | 支持,存在差异 |
|
序列整数
| MySQL数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| SERIAL | 支持,存在差异 | GaussDB中SERIAL具体介绍请参见数值类型。 规格上与MySQL的差异如下: CREATE TABLE test(f1 serial, f2 CHAR(20));
|