云服务器内容精选

  • MySQL To GaussDB 数据类型转换说明 源数据库数据类型 转换后数据类型(GaussDB 8.0以前版本) 转换后数据类型(GaussDB 8.0及其以后版本) 相关的转换配置 CHAR CHAR CHAR 字符集长度转换 选择配置项的值为“扩展字符数据类型长度”,可与DRS转换后在GaussDB 存储等价。 VARCHAR VARCHAR VARCHAR 字符集长度转换 选择配置项的值为“扩展字符数据类型长度。”,可与DRS转换后在GaussDB 存储等价。 BINARY BYTEA BYTEA - VARBINARY BYTEA BYTEA - TINYBLOB BYTEA TINYBLOB - BLOB BLOB BLOB BLOB类型转换 选择配置项的值为“BLOB类型保持不变”,可与DRS转换后在GaussDB 存储等价。 MEDIUMBLOB BYTEA MEDIUMBLOB - LONGBLOB BYTEA LONGBLOB LONGBLOB类型转换 选择配置项的值为“迁移脚本,将LONGBLOB类型转换为BYTEA类型。”,可与DRS转换后在GaussDB 存储等价。 TINYTEXT TEXT TINYTEXT - TEXT TEXT TEXT TEXT数据类型转换 选择配置项的值为“不转换,保留TEXT数据类型,并注释长度”,可与DRS转换后在GaussDB 存储等价。 MEDIUMTEXT TEXT MEDIUMTEXT - LONGTEXT CLOB LONGTEXT LONGTEXT类型转换 选择配置项的值为“迁移脚本,将LONGTEXT类型转换为CLOB类型。”,可与DRS转换后在GaussDB 存储等价。 ENUM VARCHAR VARCHAR - SET SET SET - TINYINT SMALLINT TINYINT TINYINT类型转换 选择配置项的值为“转换TINYINT类型。”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 SMALLINT SMALLINT SMALLINT 无符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 MEDIUMINT INTEGER MEDIUMINT 有符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 无符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 INT INT INT - BIGINT BIGINT BIGINT - FLOAT FLOAT4 FLOAT FLOAT类型转换 选择配置项的值为“类型转换为DOUBLE PRECISION,注释掉精度和标度,注释掉符号和填充关键字(UNSIGNED、SIGNED、ZEROFILL)”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DOUBLE DOUBLE PRECISION DOUBLE DOUBLE类型转换 选择配置项的值为“类型转换为DOUBLE PRECISION,注释掉精度和标度,注释掉符号和填充关键字(UNSIGNED、SIGNED、ZEROFILL)”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DATE DATE DATE - DATETIME TIMESTAMP DATETIME - TIMESTAMP TIMESTAMP WITH TIME ZONE TIMESTAMP - TIME TIME TIME - BIT BIT BIT - JSON JSONB JSONB json数据类型转换 选择配置项的值为“不转换,保留JSON数据类型。”,可与DRS转换后在GaussDB 存储等价。 YEAR SMALLINT SMALLINT 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DECIMAL DECIMAL DECIMAL - NUMERIC NUMERIC NUMERIC - 父主题: 数据类型转换说明
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB(DWS)提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB(DWS)中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB(DWS)扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例如: 1 2 3 4 5 SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB(DWS)分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表PG_CAST存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:boolean、numeric、string、bitstring、datetime、timespan、geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则需遵循以下基本原则: 隐含转换不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。即任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • TD兼容模式下,空串转换为数值类型的处理 TD数据库不同于Oracle,Oracle将空串当做NULL进行处理,TD在将空串转换为数值类型的时候,默认将空串转换为0进行处理,因此查询空串会查询到数值为0的数据。同样地,在TD兼容模式下,字符串转换数值的过程中,也会将空串默认转换为相应数值类型的0值进行处理。除此之外,' - '、' + '、' '这些字符串也都会在TD兼容模式下默认转换为0进行处理,但是小数点字符串' . '会报错。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE t1(no int,col varchar); INSERT INTO t1 values(1,''); INSERT INTO t1 values(2,null); SELECT * FROM t1 WHERE col is null; no | col ----+----- 2 | (1 row) SELECT * FROM t1 WHERE col=''; no | col ----+----- 1 | (1 row) MySQL兼容模式下对空串转换为数值类型的处理和TD兼容模式相同。
  • TD兼容模式下,空串转换为数值类型的处理 TD数据库不同于Oracle,Oracle将空串当做NULL进行处理,TD在将空串转换为数值类型的时候,默认将空串转换为0进行处理,因此查询空串会查询到数值为0的数据。同样地,在TD兼容模式下,字符串转换数值的过程中,也会将空串默认转换为相应数值类型的0值进行处理。除此之外,' - '、' + '、' '这些字符串也都会在TD兼容模式下默认转换为0进行处理,但是小数点字符串' . '会报错。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 create table t1(no int,col varchar); insert into t1 values(1,''); insert into t1 values(2,null); select * from t1 where col is null; no | col ----+----- 2 | (1 row) select * from t1 where col=''; no | col ----+----- 1 | (1 row) MySQL兼容模式下对空串转换为数值类型的处理和TD兼容模式相同。
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB(DWS)提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB(DWS)中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB(DWS)扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: 1 2 3 4 5 SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB(DWS)分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:boolean、numeric、string、bitstring、datetime、timespan、geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • 示例 character存储类型转换。对一个目标列定义为character(20)的语句,下面的语句显示存储值的长度正确: 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE x1 ( customer_sk integer, customer_id char(20), first_name char(6), last_name char(8) ) with (orientation = column,compression=middle) distribute by hash (last_name); INSERT INTO x1(customer_sk, customer_id, first_name) VALUES (3769, 'abcdef', 'Grace'); SELECT customer_id, octet_length(customer_id) FROM x1; 1 DROP TABLE x1; 这里真正发生的事情是两个unknown文本缺省解析成text,这样就允许||操作符解析成text连接。然后操作符的text结果转换成bpchar("空白填充的字符型", character类型内部名称)以匹配目标字段类型。不过,从text到bpchar的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。最后,在系统表里找到长度转换函数bpchar(bpchar, integer, boolean) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。
  • 值存储数据类型解析 查找与目标字段准确的匹配。 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已登记的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。 查看目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在pg_cast表里面找到一个,那么在存储到目标字段之前先在表达式上应用。这样的转换函数总是接受一个额外的类型为integer的参数,它接收目标字段的atttypmod值(实际上是其声明长度,atttypmod的解释随不同的数据类型而不同),并且它可能接受一个boolean类型的第三个参数,表示转换是显式的还是隐式的。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。
  • 操作符类型解析 从系统表pg_operator中选出要考虑的操作符。如果可以找到一个参数类型以及参数个数都一致的操作符,那么这个操作符就是最终使用的操作符。如果找到了多个备选的操作符,将从中选择一个最合适的。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选操作符。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些输入类型匹配最准确的。域类型看做和域类型的基本类型相同。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些需要类型转换时接受(属于输入数据类型的类型范畴的)首选类型位置最多的操作符。如果没有接受首选类型的操作符,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选操作符对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。如果所有剩下的候选操作符都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选操作符,如果任意候选操作符在某个给定的参数位置接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选操作符。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数都是相同的类型,那么假设unknown参数也是那种类型,并检查哪一个候选操作符在unknown参数位置接受该类型。如果只有一个操作符符合,那么使用它。否则产生一个错误。 在找到一个操作符后,如果输入的参数类型和操作符的参数类型不一致,可能会发生隐式类型转换,转换后可能发生不可预知的行为。如果隐式转换后行为有问题,可以通过显式类型转换规避此问题。例如,定长类型bpchar转换为变长类型text后,会消除字符串行尾空格,如果再和其它字符串比较时可能会发生错误行为。
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因此,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例如: 1 2 3 4 5 gaussdb=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建立在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。 XML类型数据不支持隐式类型转换,包括字符串和XML类型之间的隐式转换。
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因此,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例如: 1 2 3 4 5 gaussdb=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。 XML类型数据不支持隐式类型转换,包括字符串和XML类型之间的隐式转换。
  • TD兼容模式下,空串转换为数值类型的处理 TD数据库不同于Oracle,Oracle将空串当做NULL进行处理,TD在将空串转换为数值类型的时候,默认将空串转换为0进行处理,因此查询空串会查询到数值为0的数据。同样地,在TD兼容模式下,字符串转换数值的过程中,也会将空串默认转换为相应数值类型的0值进行处理。除此之外,' - '、' + '、' '这些字符串也都会在TD兼容模式下默认转换为0进行处理,但是小数点字符串' . '会报错。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 create table t1(no int,col varchar); insert into t1 values(1,''); insert into t1 values(2,null); select * from t1 where col is null; no | col ----+----- 2 | (1 row) select * from t1 where col=''; no | col ----+----- 1 | (1 row) MySQL兼容模式下对空串转换为数值类型的处理和TD兼容模式相同。
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB(DWS)提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB(DWS)中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB(DWS)扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: 1 2 3 4 5 SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB(DWS)分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:boolean、numeric、string、bitstring、datetime、timespan、geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • PostgreSQL To GaussDB 数据类型转换说明 源数据库数据类型 转换后数据类型 相关的转换配置 SMALLINT SMALLINT - INTEGER INTEGER - BIGINT BIGINT - INTEGER INTEGER - REAL REAL - DOUBLE PRECISION DOUBLE PRECISION - NUMERIC NUMERIC - CHARACTER VARYING CHARACTER VARYING 字符数据类型转换 选择配置项的值为“扩展字符数据类型char/varchar长度。”,可与DRS转换后在GaussDB 存储等价。 CHARACTER CHARACTER 字符数据类型转换 选择配置项的值为“扩展字符数据类型char/varchar长度。”,可与DRS转换后在GaussDB 存储等价。 BIT BIT - BIT VARYING BIT VARYING - BOOLEAN BOOLEAN - BYTEA BYTEA - TEXT TEXT - TIME WITHOUT TIME ZONE TIME WITHOUT TIME ZONE - TIME WITH TIME ZONE TIME WITH TIME ZONE - TIMESTAMP WITHOUT TIME ZONE TIMESTAMP WITHOUT TIME ZONE - TIMESTAMP WITH TIME ZONE TIMESTAMP WITH TIME ZONE - INTERVAL INTERVAL - CIDR CIDR - PATH PATH - BOX BOX - LSEG LSEG - MACADDR MACADDR - POINT POINT - POLYGON POLYGON - INET INET - TSQUERY TSQUERY - TSVECTOR TSVECTOR - UUID UUID - JSON JSON - JSONB JSONB - 配置项说明可参考PostgreSQL To GaussDB配置项使用说明。 父主题: 数据类型转换说明
  • MySQL To GaussDB数据类型转换说明 源数据库数据类型 转换后数据类型(GaussDB 8.0以前版本) 转换后数据类型(GaussDB 8.0及其以后版本) 相关的转换配置 CHAR CHAR CHAR 字符集长度转换 选择配置项的值为“扩展字符数据类型长度”,可与DRS转换后在GaussDB 存储等价。 VARCHAR VARCHAR VARCHAR 字符集长度转换 选择配置项的值为“扩展字符数据类型长度。”,可与DRS转换后在GaussDB 存储等价。 BINARY BYTEA BYTEA - VARBINARY BYTEA BYTEA - TINYBLOB BYTEA TINYBLOB - BLOB BLOB BLOB BLOB类型转换 选择配置项的值为“BLOB类型保持不变”,可与DRS转换后在GaussDB 存储等价。 MEDIUMBLOB BYTEA MEDIUMBLOB - LONGBLOB BYTEA LONGBLOB LONGBLOB类型转换 选择配置项的值为“迁移脚本,将LONGBLOB类型转换为BYTEA类型。”,可与DRS转换后在GaussDB 存储等价。 TINYTEXT TEXT TINYTEXT - TEXT TEXT TEXT TEXT数据类型转换 选择配置项的值为“不转换,保留TEXT数据类型,并注释长度”,可与DRS转换后在GaussDB 存储等价。 MEDIUMTEXT TEXT MEDIUMTEXT - LONGTEXT CLOB LONGTEXT LONGTEXT类型转换 选择配置项的值为“迁移脚本,将LONGTEXT类型转换为CLOB类型。”,可与DRS转换后在GaussDB 存储等价。 ENUM VARCHAR VARCHAR - SET SET SET - TINYINT SMALLINT TINYINT TINYINT类型转换 选择配置项的值为“转换TINYINT类型。”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 SMALLINT SMALLINT SMALLINT 无符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 MEDIUMINT INTEGER MEDIUMINT 有符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 无符号整数类型转换 选择配置项的值为“类型保持不变,不做转换”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 INT INT INT - BIGINT BIGINT BIGINT - FLOAT FLOAT4 FLOAT FLOAT类型转换 选择配置项的值为“类型转换为DOUBLE PRECISION,注释掉精度和标度,注释掉符号和填充关键字(UNSIGNED、SIGNED、ZEROFILL)”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DOUBLE DOUBLE PRECISION DOUBLE DOUBLE类型转换 选择配置项的值为“类型转换为DOUBLE PRECISION,注释掉精度和标度,注释掉符号和填充关键字(UNSIGNED、SIGNED、ZEROFILL)”,可与DRS转换后在GaussDB 存储等价。 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DATE DATE DATE - DATETIME TIMESTAMP DATETIME - TIMESTAMP TIMESTAMP WITH TIME ZONE TIMESTAMP - TIME TIME TIME - BIT BIT BIT - JSON JSON JSON - YEAR SMALLINT SMALLINT 类型转换后是否添加CHECK约束 选择配置项的值为“不添加CHECK约束。”,可与DRS转换后在GaussDB 存储等价。 DECIMAL DECIMAL DECIMAL - NUMERIC NUMERIC NUMERIC - 配置项说明可参考MySQL To GaussDB配置项使用说明。 父主题: 数据类型转换说明
  • PostgreSQL To GaussDB 数据类型转换说明 源数据库数据类型 转换后数据类型 相关的转换配置 SMALLINT SMALLINT - INTEGER INTEGER - BIGINT BIGINT - INTEGER INTEGER - REAL REAL - DOUBLE PRECISION DOUBLE PRECISION - NUMERIC NUMERIC - CHARACTER VARYING CHARACTER VARYING 字符数据类型转换 选择配置项的值为“扩展字符数据类型char/varchar长度。”,可与DRS转换后在GaussDB 存储等价。 CHARACTER CHARACTER 字符数据类型转换 选择配置项的值为“扩展字符数据类型char/varchar长度。”,可与DRS转换后在GaussDB 存储等价。 BIT BIT - BIT VARYING BIT VARYING - BOOLEAN BOOLEAN - BYTEA BYTEA - TEXT TEXT - TIME WITHOUT TIME ZONE TIME WITHOUT TIME ZONE - TIME WITH TIME ZONE TIME WITH TIME ZONE - TIMESTAMP WITHOUT TIME ZONE TIMESTAMP WITHOUT TIME ZONE - TIMESTAMP WITH TIME ZONE TIMESTAMP WITH TIME ZONE - INTERVAL INTERVAL - CIDR CIDR - PATH PATH - BOX BOX - LSEG LSEG - MACADDR MACADDR - POINT POINT - POLYGON POLYGON - INET INET - TSQUERY TSQUERY - TSVECTOR TSVECTOR - UUID UUID - JSON JSON - JSONB JSONB - 配置项说明可参考PostgreSQL To GaussDB配置项使用说明。 父主题: 数据类型转换说明