1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 金仓数据库 KingbaseES SQL语言参考手册(3.1.1.1. 字符数据类型)

金仓数据库 KingbaseES SQL语言参考手册(3.1.1.1. 字符数据类型)

时间:2023-04-18 05:30:16

相关推荐

金仓数据库 KingbaseES SQL语言参考手册(3.1.1.1. 字符数据类型)

3.KingbaseES SQL 基本元素

本章包含KingbaseES SQL基本元素的信息。这些元素是 SQL 语句的最简单构建基础。因此,在使用本书中描述的 SQL 语句之前,应该熟悉本章中介绍的概念。

本章包含以下内容:

数据类型

数据类型比较规则

常量

格式模型

空值

注释

数据库对象

数据库命名规范_

模式对象引用语法_

3.1.数据类型

KingbaseES数据库操作的每个值都有其数据类型。数据类型具有特定的属性,因此对不同数据类型的值KingbaseES处理是不同的。例如,可以添加NUMBER 数据类型的值,就不能添加RAW数据类型的值。

创建表时,必须为其每个列指定数据类型。创建过程或存储函数时,必须为其每个参数指定数据类型。数据类型定义每列的值域或每个参数的值域。例如,DATE列不能接受值 2 月 29 日(闰年除外)或值 2 或“SHOE”。插入列中的每个值都认定为该数据类型。例如,如果插入'01-JAN-98'值到DATE 列中,则 KingbaseES会在验证字符串转换为有效日期后将其视为DATE值。

KingbaseES数据库提供了许多内置数据类型,和用户自定义类型。下面会逐一介绍各数据类型。本节分为以下几部分内容:

KingbaseES内置数据类型

用户自定义类型

3.1.1.KingbaseES内置数据类型

3.1.1.1.字符数据类型

字符数据类型存储字符(字母数字)数据,包括单词和自由格式文本,以数据库字符集或国际字符集形式存储。比其他数据类型的限制少,具有较少的属性。例如,字符列可以存储所有字母数字值,但数值列只能存储数值。

字符数据存储在字符串中,其字节值与建库时指定的字符集对应,如 7 位 ASCII 或 EBCDIC。KingbaseES数据库支持单字节和多字节字符集。

3.1.1.1.1.character[(n [char | byte])]数据类型

语法:character[(n [char | byte])]

别名:char[(n [char | byte])]

定长字符串,n 限定字符串长度,如果显式指定 char,则表示n个字符长度;如果显式指定byte,则表示n个字节长度;

如果没有显式指定,则以系统参nls_length_semantics为准,若系统参数 nls_length_semantics 为 char,则以字符为单位,否则以字节为单位。

值域:定长,不足定义长度时在最右边以空格补齐。n 的最大值为 10485760,最小值为1,默认值为1。如果字符串的长度超出 n,则按照 SQL 标准截断 (兼容PostgreSQL模式下,超出部分都是空格) 或报错。

用例:

nls_length_semantics为 缺省是 char 的情况

set nls_length_semantics为='char';create table test_default_char (col char(4));insert into test_default_char values ('1234');insert into test_default_char values ('12345');ERROR: value too long for type character(4)insert into test_default_char values ('一二');insert into test_default_char values ('一二三');select col, length(col) from test_default_char;COL | LENGTH---------+--------1234 |4一二 |2一二三 |3

nls_length_semantics 缺省是 byte 的情况

set nls_length_semantics为='byte';create table test_default_byte (col char(4));insert into test_default_byte values ('1234');insert into test_default_byte values ('12345');ERROR: 用于类型字符(4 byte)的值过长insert into test_default_byte values ('一');insert into test_default_byte values ('一二三');ERROR: 用于类型字符(4 byte)的值过长select col, length(col) from test_default_byte;COL | LENGTH------+--------1234 |4一 |1

显式指定是 byte 的情况

create table test_byte (col char(4 byte));insert into test_byte values ('1234');insert into test_byte values ('12345');ERROR: 用于类型字符(4 byte)的值过长insert into test_byte values ('一');insert into test_byte values ('一二三');ERROR: 用于类型字符(4 byte)的值过长select col, length(col) from test_byte;COL | LENGTH------+--------1234 |4一 |1

显式指定是 char 的情况

create table test_char (col char(4 char));insert into test_char values ('1234');insert into test_char values ('12345');ERROR: 用于类型字符(4)的值过长insert into test_char values ('一二三四');insert into test_char values ('一二三四五');ERROR: 用于类型字符(4)的值过长select col, length(col) from test_char;COL | LENGTH----------+--------1234|4一二三四 |4使用此数据类型创建列存储表的情况当nls_length_semantics为 缺省是 char 时:set nls_length_semantics='char';create table test_default_char (col char(4));文件“c:\file.txt”中内容如下:123412345执行语句:copy test_default_char from 'c:\file.txt';ERROR: value too long for type char varying(4)CONTEXT: COPY test_default_char, line 2, column col: "12345"

3.1.1.1.2.character varying[(n [char | byte])] 数据类型

语法:character varying[(n [char | byte])]

别名:varchar[(n [char | byte])]

varchar2[(n [char | byte])]

nvarchar2[(n [char | byte])]

nvarchar[(n [char|byte])]

变长字符串,如果显式指定了 char,则表示n个字符长度;如果显式指定byte,则表示n个字节长度; 如果没有显式指定,则以系统参数 nls_length_semantics为准,若系统参数 nls_length_semantics 为 char,则以字符为单位,否则以字节为单位。

值域:变长,有长度限制。字符串长度小于 n 时不在字符串右边用空格补齐。n 的最大值为 10485760。如果n缺省,则character varying 表示接受任何长度的串。

用例:

nls_length_semantics 缺省是 char 的情况

set nls_length_semantics='char';create table test_default_varchar (col varchar(4));insert into test_default_varchar values ('1234');insert into test_default_varchar values ('12345');ERROR: 类型VARCHAR(4)的值过长insert into test_default_varchar values ('一二');insert into test_default_varchar values ('一二三');select col, length(col) from test_default_varchar;COL | LENGTH--------+--------1234 |4一二 |2一二三 |3

nls_length_semantics 缺省是 byte 的情况

set nls_length_semantics='byte';create table test_default_varbyte (col varchar(4));insert into test_default_varbyte values ('1234');insert into test_default_varbyte values ('12345');ERROR: 类型VARCHAR(4 byte)的值过长insert into test_default_varbyte values ('一');insert into test_default_varbyte values ('一二三');ERROR: 类型VARCHAR(4 byte)的值过长select col, length(col) from test_default_varbyte;COL | LENGTH------+--------1234 |4一|2

显式指定是 byte 的情况

create table test_varbyte (col varchar(4 byte));insert into test_varbyte values ('1234');insert into test_varbyte values ('12345');ERROR: 类型VARCHAR(4 byte)的值过长insert into test_varbyte values ('一');insert into test_varbyte values ('一二三');ERROR: 类型VARCHAR(4 byte)的值过长select col, length(col) from test_varbyte;COL | LENGTH------+--------1234 |4一 |2

显式指定是 char 的情况

create table test_varchar (col varchar(4 char));insert into test_varchar values ('1234');insert into test_varchar values ('12345');ERROR: 类型VARCHAR(4)的值过长insert into test_varchar values ('一二三四');insert into test_varchar values ('一二三四五');ERROR: 类型VARCHAR(4)的值过长select col, length(col) from test_varchar;COL | LENGTH----------+--------1234|4一二三四 |4使用此数据类型创建列存储表的情况nls_length_semantics 缺省是 char 的情况set nls_length_semantics='char';create table test_default_varchar (col varchar(4));文件“c:\file.txt”中内容如下:123412345执行语句:copy test_default_varchar from 'c:\file.txt';ERROR: value too long for type character varying(4)CONTEXT: COPY test_default_varchar, line 2, column col: "12345"

使用字符类型

CREATE TABLE test1 (a character(4));INSERT INTO test1 VALUES ('ok');SELECT a, char_length(a) FROM test1;a | char_length------+-------------ok | 2CREATE TABLE test2 (b varchar(5));INSERT INTO test2 VALUES ('ok');INSERT INTO test2 VALUES ('good');ERROR: value too large for column "public"."test2"."b" (actual:10, maximum:5)INSERT INTO test2 VALUES ('too long');ERROR: value too large for column "public"."test2"."b" (actual:8, maximum:5)INSERT INTO test2 VALUES ('too long'::varchar(5));SELECT b, char_length(b) FROM test2;b | char_length-------+-------------ok | 2too l | 5

在KingbaseES里另外还有两种定长字符类型,在表 3.1.28里显示。name类型只用于在内部系统目录中存储标识符并且不是给一般用户使用的。该类型长度当前定为 64 字节(63 可用字符加结束符)但在C源代码应该使用常量NAMEDATALEN引用。这个长度是在编译的时候设置的(因而可以为特殊用途调整),缺省的最大长度在以后的版本可能会改变。类型"char"(注意引号)和char(1)是不一样的,它只用了一个字节的存储空间。它在系统内部用于系统目录当做简化的枚举类型用。

3.1.1.1.3.TEXT 数据类型

语法:TEXT

变长字符串类型。其字符串的长度最大为 1G。使用该类型存储长的文本串。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。