文档首页 > > 工具指南> DSC SQL语法迁移工具> SQL语法迁移参考> MySQL语法迁移> 基本数据类型

基本数据类型

分享
更新时间:2020/08/05 GMT+08:00

概述

MySQL支持多种基本数据类型,大致可以分为以下几类:数值、日期/时间、字符串(字符)、大对象、集合、二进制和布尔类型。GaussDB A或不支持部分MySQL基本数据类型,或不支持部分MySQL数据类型精度设定,或不支持"UNSIGNED"、"ZEROFILL"等关键字。DSC工具会根据GaussDB的支持情况做相应迁移。

数据类型是数据的一个基本属性,用于区分不同类型的数据。不同的数据类型所占的存储空间不同,能够进行的操作也不相同。数据库中的数据存储在数据表中。数据表中的每一列都定义了数据类型,用户存储数据时,须遵从这些数据类型的属性,否则可能会出错。各数据类型的基本概述详见表1

表1 数据类型基本概述

数据类型

基本描述

数字类型

内容详见数字类型对照

日期和时间类型

文档中介绍如下日期和时间类型:DATETIME、TIME、TIMESTAMP、YEAR。GaussDB A不支持以上类型,DSC工具将会对其转换。内容详见时间和日期类型对照

字符串类型

MySQL以字符单位解释字符列定义中的长度规范。这适用于 CHAR、VARCHAR和TEXT类型。内容详见字符串类型对照

空间数据类型

MySQL具有对应于OpenGIS类的空间数据类型。内容详见空间数据类型对照

大对象类型

BLOB是一个二进制大对象,可以容纳可变数量的数据。这四个BLOB 类型是TINYBLOB,BLOB, MEDIUMBLOB,和LONGBLOB。这些不同之处仅在于它们可以容纳的值的最大长度。内容详见大对象类型对照

集合类型

  1. MySQL ENUM是一个字符串对象,具有从列创建时在列规范中明确枚举的允许值列表中选择的值。
  2. SET是一个字符串对象,可以有零个或多个值,每个值必须从创建表时指定的允许值列表中选择。

    内容详见集合类型对照

布尔类型

MySQL 支持两种布尔写法:BOOL、BOOLEAN。内容详见布尔类型对照

二进制类型

  1. MySQL BIT数据类型被用于存储比特值。一种类型 允许存储位值。 可以从1到64。
  2. MySQL BINARY和VARBINARY 类似CHAR并且VARCHAR,只不过它们包含二进制字符串。

    内容详见二进制类型对照

数字类型对照

表2 数字类型对照表

MySQL数字类型

MySQL INPUT

GaussDB A OUTPUT

DEC

DEC

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

DECIMAL

DECIMAL[(M[,D])]

DECIMAL

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

DECIMAL[(M[,D])]

DOUBLE PRECISION

DOUBLE PRECISION

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

FLOAT

FLOAT[(M)]

DOUBLE

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

FLOAT[(M)]

FIXED

FIXED

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

DECIMAL

DECIMAL[(M[,D])]

FLOAT

FLOAT

FLOAT [(M[,D])] [UNSIGNED] [ZEROFILL]

FLOAT(p) [UNSIGNED] [ZEROFILL]

FLOAT

FLOAT[(M)]

FLOAT(p)

INT

INT

INT(p) [UNSIGNED] [ZEROFILL]

INTEGER

INTEGER(p)

INTEGER

INTEGER

INTEGER(p) [UNSIGNED] [ZEROFILL]

INTEGER

INTEGER(p)

MEDIUMINT

MEDIUMINT

MEDIUMINT(p) [UNSIGNED] [ZEROFILL]

INTEGER

INTEGER(p)

NUMERIC

NUMERIC

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

DECIMAL

DECIMAL[(M[,D])]

REAL

REAL[(M[,D])]

FLOAT[(M)]

SMALLINT

SMALLINT

SMALLINT(p) [UNSIGNED] [ZEROFILL]

SMALLINT

TINYINT

TINYINT

TINYINT(n)

TINYINT(n) ZEROFILL

TINYINT(n) UNSIGNED ZEROFILL

TINYINT

TINYINT

TINYINT

SMALLINT

输入示例:TINYINT

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` TINYINT,
    `dataType_2` TINYINT(0),
    `dataType_3` TINYINT(255),
    `dataType_4` TINYINT(255) UNSIGNED ZEROFILL,
    `dataType_5` TINYINT(255) ZEROFILL
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" TINYINT,
  "datatype_2" TINYINT,
  "datatype_3" TINYINT,
  "datatype_4" SMALLINT,
  "datatype_5" TINYINT
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

时间和日期类型对照

表3 日期和时间类型对照表

MySQL日期时间类型

MySQL INPUT

GaussDB A OUTPUT

DATETIME

DATETIME[(fsp)]

TIMESTAMP[(fsp)] WITHOUT TIME ZONE

TIME

TIME[(fsp)]

TIME[(fsp)] WITHOUT TIME ZONE

TIMESTAMP

TIMESTAMP[(fsp)]

TIMESTAMP[(fsp)] WITH TIME ZONE

YEAR

YEAR[(4)]

VARCHAR(4)

fsp值如果给出,则必须在0到6的范围内。值为0表示没有小数部分。如果省略,则默认精度为0。

输入示例:DATETIME

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` DATETIME,
    `dataType_2` DATETIME(0),
    `dataType_3` DATETIME(6),
    `dataType_4` DATETIME DEFAULT NULL,
    `dataType_5` DATETIME DEFAULT '2018-10-12 15:27:33.999999'
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" TIMESTAMP WITHOUT TIME ZONE,
  "datatype_2" TIMESTAMP(0) WITHOUT TIME ZONE,
  "datatype_3" TIMESTAMP(6) WITHOUT TIME ZONE,
  "datatype_4" TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
  "datatype_5" TIMESTAMP WITHOUT TIME ZONE DEFAULT '2018-10-12 15:27:33.999999'
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例:TIME

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` TIME DEFAULT '20:58:10',
    `dataType_2` TIME(3) DEFAULT '20:58:10',
    `dataType_3` TIME(6) DEFAULT '20:58:10',
    `dataType_4` TIME(6) DEFAULT '2018-10-11 20:00:00',
    `dataType_5` TIME(6) DEFAULT '20:58:10.01234',
    `dataType_6` TIME(6) DEFAULT '2018-10-11 20:00:00.01234',
    `dataType_7` TIME DEFAULT NULL,
    `dataType_8` TIME(6) DEFAULT NULL,
    PRIMARY KEY (dataType_1)
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" TIME WITHOUT TIME ZONE DEFAULT '20:58:10',
  "datatype_2" TIME(3) WITHOUT TIME ZONE DEFAULT '20:58:10',
  "datatype_3" TIME(6) WITHOUT TIME ZONE DEFAULT '20:58:10',
  "datatype_4" TIME(6) WITHOUT TIME ZONE DEFAULT '2018-10-11 20:00:00',
  "datatype_5" TIME(6) WITHOUT TIME ZONE DEFAULT '20:58:10.01234',
  "datatype_6" TIME(6) WITHOUT TIME ZONE DEFAULT '2018-10-11 20:00:00.01234',
  "datatype_7" TIME WITHOUT TIME ZONE DEFAULT NULL,
  "datatype_8" TIME(6) WITHOUT TIME ZONE DEFAULT NULL,
  PRIMARY KEY ("datatype_1")
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例:TIMESTAMP

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
   `dataType_1` TIMESTAMP,
   `dateType_4` TIMESTAMP DEFAULT '2018-10-12 15:27:33',
   `dateType_5` TIMESTAMP DEFAULT '2018-10-12 15:27:33.999999',
   `dateType_6` TIMESTAMP DEFAULT '2018-10-12 15:27:33',
   `dateType_7` TIMESTAMP DEFAULT '2018-10-12 15:27:33',
   `dataType_8` TIMESTAMP(0) DEFAULT '2018-10-12 15:27:33',
   `dateType_9` TIMESTAMP(6) DEFAULT '2018-10-12 15:27:33'
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" TIMESTAMP WITH TIME ZONE,
  "datetype_4" TIMESTAMP WITH TIME ZONE DEFAULT '2018-10-12 15:27:33',
  "datetype_5" TIMESTAMP WITH TIME ZONE DEFAULT '2018-10-12 15:27:33.999999',
  "datetype_6" TIMESTAMP WITH TIME ZONE DEFAULT '2018-10-12 15:27:33',
  "datetype_7" TIMESTAMP WITH TIME ZONE DEFAULT '2018-10-12 15:27:33',
  "datatype_8" TIMESTAMP(0) WITH TIME ZONE DEFAULT '2018-10-12 15:27:33',
  "datetype_9" TIMESTAMP(6) WITH TIME ZONE DEFAULT '2018-10-12 15:27:33'
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例:YEAR

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` YEAR,
    `dataType_2` YEAR(4),
    `dataType_3` YEAR DEFAULT '2018',
    `dataType_4` TIME DEFAULT NULL
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" VARCHAR(4),
  "datatype_2" VARCHAR(4),
  "datatype_3" VARCHAR(4) DEFAULT '2018',
  "datatype_4" TIME WITHOUT TIME ZONE DEFAULT NULL 
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

字符串类型对照

表4 字符串类型对照表

MySQL字符串类型

MySQL INPUT

GaussDB A OUTPUT

CHAR

CHAR[(0)]

CHAR[(1)]

LONGTEXT

LONGTEXT

TEXT

MEDIUMTEXT

MEDIUMTEXT

TEXT

TEXT

TEXT

TEXT

TINYTEXT

TINYTEXT

TEXT

VARCHAR

VARCHAR[(0)]

VARCHAR[(1)]

输入示例:CHAR

MySQL 一个长度CHAR列被固定在创建表声明的长度。长度可以是从0到255之间的任何值。CHAR 存储值时,它们将空格填充到指定的长度。

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
   `dataType_1` CHAR NOT NULL,
   `dataType_2` CHAR(0) NOT NULL,
   `dataType_3` CHAR(255) NOT NULL
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" CHAR NOT NULL,
  "datatype_2" CHAR(1) NOT NULL,
  "datatype_3" CHAR(255) NOT NULL
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例[LONG|MEDIUM|TINY]TEXT

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` LONGTEXT,
    `dataType_2` MEDIUMTEXT,
    `dataType_3` TEXT,
    `dataType_4` TINYTEXT
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" TEXT,
  "datatype_2" TEXT,
  "datatype_3" TEXT,
  "datatype_4" TEXT
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例:VARCHAR

MySQL VARCHAR列中的 值是可变长度的字符串。长度可以指定为0到65,535之间的值。

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` VARCHAR(0),
    `dataType_2` VARCHAR(1845)
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" VARCHAR(1),
  "datatype_2" VARCHAR(1845)
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

空间数据类型对照

表5 空间数据类型对照表

MySQL空间数据类型

MySQL INPUT

GaussDB A OUTPUT

GEOMETRY

GEOMETRY

CIRCLE

POINT

POINT

POINT

LINESTRING

LINESTRING

POLYGON

POLYGON

POLYGON

POLYGON

MULTIPOINT

MULTIPOINT

BOX

MULTILINESTRING

MULTILINESTRING

BOX

MULTIPOLYGON

MULTIPOLYGON

POLYGON

GEOMETRYCOLLECTION

GEOMETRYCOLLECTION

CIRCLE

  • GEOMETRY可以存储任何类型的几何值。其他单值类型(POINT, LINESTRING和POLYGON)将其值限制为特定的几何类型。
  • GEOMETRYCOLLECTION可以存储任何类型的对象的集合。其他集合类型(MULTIPOINT, MULTILINESTRING, MULTIPOLYGON,和 GEOMETRYCOLLECTION)限制集合成员向那些具有特定的几何形状的类型。

    输入示例

    CREATE TABLE `t_geo_test2`  (
      `id` int(11) NOT NULL,
      `name` varchar(255),
      `geometry_1` geometry NOT NULL,
      `point_1` point NOT NULL,
      `linestring_1` linestring NOT NULL,
      `polygon_1` polygon NOT NULL,
      `multipoint_1` multipoint NOT NULL,
      `multilinestring_1` multilinestring NOT NULL,
      `multipolygon_1` multipolygon NOT NULL,
      `geometrycollection_1` geometrycollection NOT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB;

    输出示例

    CREATE TABLE "public"."t_geo_test2"
    (
      "id" INTEGER(11) NOT NULL,
      "name" VARCHAR(255),
      "geometry_1" CIRCLE NOT NULL,
      "point_1" POINT NOT NULL,
      "linestring_1" POLYGON NOT NULL,
      "polygon_1" POLYGON NOT NULL,
      "multipoint_1" BOX NOT NULL,
      "multilinestring_1" BOX NOT NULL,
      "multipolygon_1" POLYGON NOT NULL,
      "geometrycollection_1" CIRCLE NOT NULL,
      PRIMARY KEY ("id")
    )
      WITH ( ORIENTATION = ROW, COMPRESSION = NO )
      NOCOMPRESS
      DISTRIBUTE BY HASH ("id");

大对象类型对照

表6 大对象类型对照表

MySQL大对象类型

MySQL INPUT

GaussDB A OUTPUT

TINYBLOB

TINYBLOB

BLOB

BLOB

BLOB

BLOB

MEDIUMBLOB

MEDIUMBLOB

BLOB

LONGBLOB

LONGBLOB

BLOB

输入示例:[TINY|MEDIUM|LONG]BLOB

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` BIGINT,
    `dataType_2` TINYBLOB,
    `dataType_3` BLOB,
    `dataType_4` MEDIUMBLOB,
    `dataType_5` LONGBLOB
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" BIGINT,
  "datatype_2" BLOB,
  "datatype_3" BLOB,
  "datatype_4" BLOB,
  "datatype_5" BLOB
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

集合类型对照

表7 集合类型对照表

MySQL集合类型

MySQL INPUT

GaussDB A OUTPUT

ENUM

ENUM

VARCHAR(14)

SET

SET

VARCHAR(14)

输入示例:ENUM

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
     id   int(2) PRIMARY KEY,
    `dataType_17` ENUM('dws-1', 'dws-2', 'dws-3')
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "id" INTEGER(2) PRIMARY KEY,
  "datatype_17" VARCHAR(14)
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("id");

输入示例:SET

CREATE TABLE IF NOT EXISTS `runoob_tbl_test`(
    `dataType_18` SET('dws-1', 'dws-2', 'dws-3')
);

输出示例

CREATE TABLE "public"."runoob_tbl_test"
(
  "datatype_18" VARCHAR(14)
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_18");

布尔类型对照

输入示例:BOOL/BOOLEAN

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` INT,
    `dataType_2` BOOL,
    `dataType_3` BOOLEAN
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" INTEGER,
  "datatype_2" BOOLEAN,
  "datatype_3" BOOLEAN
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

二进制类型对照

表8 二进制类型对照表

MySQL二进制类型

MySQL INPUT

GaussDB A OUTPUT

BIT[(M)]

BIT[(M)]

BIT[(M)]

BINARY[(M)]

BINARY[(M)]

BYTEA

VARBINARY[(M)]

VARBINARY[(M)]

BYTEA

输入示例:BIT

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` INT,
    `dataType_2` BIT(1),
    `dataType_3` BIT(64)
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" INTEGER,
  "datatype_2" BIT(1),
  "datatype_3" BIT(64)
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");

输入示例:[VAR]BINARY

CREATE TABLE IF NOT EXISTS `runoob_dataType_test`(
    `dataType_1` INT,
    `dataType_2` BINARY,
    `dataType_3` BINARY(0),
    `dataType_4` BINARY(255),
    `dataType_5` VARBINARY(0),
    `dataType_6` VARBINARY(6553)
);

输出示例

CREATE TABLE "public"."runoob_datatype_test"
(
  "datatype_1" INTEGER,
  "datatype_2" BYTEA,
  "datatype_3" BYTEA,
  "datatype_4" BYTEA,
  "datatype_5" BYTEA,
  "datatype_6" BYTEA
)
  WITH ( ORIENTATION = ROW, COMPRESSION = NO )
  NOCOMPRESS
  DISTRIBUTE BY HASH ("datatype_1");
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问