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.27 字符类型

名字

描述

character varying[(n [char | byte])])

varchar(n [char | byte])

varchar2(n [char | byte])

nvarchar2(n [char | byte])

nvarchar(n [char | byte])

有限制的变长

n取值最小为 1 字节或 1 字符

最大10485760字节或字符

n缺省值为1。

char 或 byte 的默认值由

NLS_LENGTH_SEMANTICS 确定。

(n可以取'*',表示不限制长度)

character(n [char | byte])

char(n [char | byte])

char(n [char | byte])

指定长度的定长字符,最大长度是

最大长度是10485760个字节或者字符

n缺省值为1

char 或 byte 的默认值由

NLS_LENGTH_SEMANTICS 确定。

text

无限变长,存储任何长度的字符串

存储最大值为1G。

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模式下,超出部分都是空格) 或报错。

用例:

  1. 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
    
    1. 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
      
    2. 显式指定是 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 表示接受任何长度的串。

用例:

  1. 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
    
  2. 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
    
  3. 显式指定是 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
    
  4. 显式指定是 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"
    
  5. 使用字符类型

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.28 特殊字符类型¶

名字

存储尺寸

描述

"char"

1字节

单字节内部类型

name

64字节

用于对象名的内部类型

3.1.1.1.3. TEXT 数据类型

语法:TEXT

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

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

  1. 金仓数据库 KingbaseES SQL 语言参考手册 (11. SQL语句:ABORT 到 ALTER INDEX)

    11. SQL语句:ABORT 到 ALTER INDEX 本章描述各种类型的SQL语句,由于类型较多,将按字母顺序排列分组.这是第一组SQL语句. 包含以下章节: SQL语句类型 SQL语句各章节是 ...

  2. 金仓数据库 KingbaseES SQL 语言参考手册 (13. SQL语句:ALTER SYNONYM 到 COMMENT)

    13. SQL语句:ALTER SYNONYM 到 COMMENT 本章包含以下SQL语句: ALTER SYNONYM ALTER SYSTEM ALTER TABLE ALTER TABLESPA ...

  3. 金仓数据库 KingbaseES SQL 语言参考手册 (16. SQL语句: CREATE SEQUENCE 到 DELETE)

    16. SQL语句: CREATE SEQUENCE 到 DELETE 本章包含以下SQL语句: CREATE SEQUENCE CREATE SERVER CREATE STATISTICS CRE ...

  4. 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)

    10. 查询和子查询 本章描述SQL查询以及子查询.包含以下章节: 关于查询和子查询 创建简单查询 层次查询 集合操作 查询结果排序 JOIN操作 使用子查询 限制嵌套查询层数 DUAL表查询 10. ...

  5. 金仓数据库 KingbaseES SQL 语言参考手册 (7. 条件表达式)

    7. 条件表达式 条件表达式 指定一个或多个表达式和逻辑(布尔)运算符的组合,并返回TRUE.FALSE的值或UNKNOWN. 本章包含以下部分: SQL条件简介 比较条件 浮点条件 逻辑条件 模式匹 ...

  6. 金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(二))

    8.21. ABBREV 用法: abbrev({inet | cidr}) 功能: 缩写显示格式文本 例子: abbrev(inet '10.1.0.0/16') abbrev(cidr '10.1 ...

  7. 金仓数据库KingbaseES数据库参考手册(服务器配置参数14. 版本和平台兼容性)

    目录 14.1. KingbaseES老版本 ¶ 14.2. 平台和客户端兼容性 ¶ 14.3. 一般特性兼容性 ¶ 14.1. KingbaseES老版本 ¶ array_nulls 属性 描述 类 ...

  8. 金仓数据库KingbaseES数据库开发指南(2. 开发基础)

    目录 2.1. 设计基础 ¶ 2.1.1. 数据库部署模式 ¶ 2.1.2. 数据库环境规划 ¶ 2.1.3. 可扩展性设计 ¶ 2.1.4. 安全设计 ¶ 2.1.5. 可移植性设计 ¶ 2.1.6 ...

  9. 金仓数据库KingbaseES行列转换

    概述 行列转换是在数据分析中经常用到的一项功能,金仓数据库KingbaseES从V8R6C3B0071版本开始通过扩展插件(kdb_utils_function)支持pivot和unpivot功能.在 ...

最新文章

  1. linux系统管理学习笔记之三----软件的安装
  2. 性能指标:QPS、TPS、RT、吞吐量
  3. 皮一皮:爷的青春一去不回了...
  4. HTML5 本地文件操作之FileSystemAPI整理(一)
  5. 用Chrome开发者工具调试一切
  6. ddr test DCD CFG file CBT
  7. Genymotion 下载一直失败的解决办法
  8. MySQL 8.0 新特性:引人注目的哈希连接(Hash Join)
  9. django-orm的表操作.
  10. 如何在线判断一个文件是否安全? 在线沙箱 / 文件分析系统 / 在线查毒 / 云运行截图
  11. 【开学了】整理各种常用功能的实现 | 小游戏源码分享
  12. VisionPro基础篇(一): VisionPro界面介绍
  13. 公博评级06代表什么_钱币公博评级上72(05)什么意思?
  14. MKS GEN_L V2.1使用说明书
  15. unkown the request
  16. 【POJ 3179】 Corral the Cows
  17. 补齐 windows 运行库和运行环境(VC++、DirectX、.Net)
  18. 验证括号的匹配(艾伦图灵的栈操作)
  19. 互联网女皇发布年度互联网报告:强调Google机器学习准确性
  20. python金融pdf下载_Python金融大数据分析 完整版 中文pdf扫描版[42MB]

热门文章

  1. 手动修复重建Windows 10系统EFI分区引导bootloader
  2. 在Simulink中利用simmechanics对三自由度的串联机械臂进行仿真
  3. 计算机科学与技术指导情况记录表,计算机科学与技术学院工作记录模板.doc
  4. diceplayer android版本可以实现 快速播放功能
  5. 国内十大人工智能网站
  6. 面试常问的40个问题(1-27)
  7. 半吊子 opencv学习笔记
  8. 通信信道容量、带宽的理解
  9. 显卡测试哪个软件好,哪种显卡测试软件更好
  10. Atitit 项目中的俩大孤岛问题 项目孤岛 编程语言孤岛 项目管理 目录 1. 孤岛效应 1 1.1. 功能重复建设 不同项目组,不同语言的功能重复建设 1 1.2. 人员互相支援不利,项目