字符类数据类型和oracle字符类型的区别
为兼容Oracle的数据类型,KingbaseES扩展了Oracle的NUMBER、VARCHAR2、CHAR(n)和DATE类型。该措施使得移植Oracle的Create Table等DDL语句时,无需任何修改就能直接在KingbaseES环境中运行。
虽然扩展了oracle的字符类型,但是相同数据类型之间还是有有些区别:
| 数据类型 | KingbaseES | Oracle |
| CHARACTER(n) CHAR(n) NCHAR(n) |
char表示一个字符 Byte表示一个字节 默认为1 值域:10485760 char | byte。 |
值域:11g 默认值 1 |
| CHARACTER VARYING(n) NVARCHAR(n) NVARCHAR2(n) VARCHAR(n) VARCHAR2(n) |
值域:10485760 char | byte。 默认长度:可以不指定,默认没有限制。 |
值域:11g |
下面通过一些例子来验证一下:
1、数据类型的最大长度
Oracle11g:
char类型的最大长度是2000字节,varchar2是4000个字节。nchar,nvarchar2类型的最大长度根据数据集不同而不同。最终的byte数不能超过2000和4000。如字符集为AL16UTF16,则nchar的为2000/2=1000,而nvarchar2则为4000/2=2000
SQL> create table o_test1(name char(2001)); create table o_test1(name char(2001))
*
ERROR at line 1: ORA-00910: specified length too long for its datatype SQL> create table o_test1(name char(2000)); Table created. SQL> create table o_test2(name varchar2(4001)); create table o_test2(name varchar2(4001))
*
ERROR at line 1: ORA-00910: specified length too long for its datatype SQL> create table o_test2(name varchar2(4000)); Table created. SQL> create table o_table3(name nchar(1001)); create table o_table3(name nchar(1001))
*
ERROR at line 1: ORA-00910: specified length too long for its datatype SQL> create table o_table3(name nchar(1000)); Table created. SQL> create table o_table4(name nvarchar2(2001)); create table o_table4(name nvarchar2(2001))
*
ERROR at line 1: ORA-00910: specified length too long for its datatype SQL> create table o_table4(name nvarchar2(2000)); Table created.
KingbaseES
理论最大值10485760
test=# create table k_test1(name char(10485761));
错误: 类型 char 的长度不能超过 10485760
第1行create table k_test1(name char(10485761));
^
test=# create table k_test1(name char(10485760));
CREATE TABLE test=# create table k_test2(name varchar(10485761));
错误: 类型 varchar 的长度不能超过 10485760
第1行create table k_test2(name varchar(10485761));
^
test=# create table k_test2(name varchar(10485760));
CREATE TABLE test=# create table k_test3(name varchar2(10485761));
错误: 类型 varchar 的长度不能超过 10485760
第1行create table k_test3(name varchar2(10485761));
^
test=# create table k_test3(name varchar2(10485760));
CREATE TABLE
2、char 默认长度
Oracle:char类型,不带字符数的时候,是1个字符(char(1)),而varchar2必须有字符数。nchar和nvarchar2分别与char,varchar2类似。
SQL> create table o_test1(name char, addr varchar);
create table o_test1(name char, addr varchar)
*
ERROR at line 1:
ORA-00906: missing left parenthesis SQL> create table o_test1(name char, addr varchar(5));
Table created. SQL> insert into o_test1 values('12','OK');
insert into o_test1 values('12','OK')
*
ERROR at line 1:
ORA-12899: value too large for column "SYS"."O_TEST1"."NAME" (actual: 2, maximum: 1) SQL> insert into o_test1 values('1','OK');
1 row created.
KingbaseES:
char类型,不带字符数的时候,也是默认一个字符(char(1)),而varchar不带字符数的时候,没有限制。
test=# create table k_test4(name char, addr varchar);
CREATE TABLE test=# insert into k_test4 values('12', '1234567890');
错误: 对于字符类型来说这个值太长了(1) test=# insert into k_test4 values('1', '1234567890');
INSERT 0 1
3、插入数据库的时候的,字符数超出最大长度部分的处理。
Oracle:报错。
SQL> insert into o_test1 values('1','123456');
insert into o_test1 values('1','123456')
ERROR at line 1:
ORA-12899: value too large for column "SYS"."O_TEST1"."ADDR" (actual: 6,maximum: 5)
SQL> insert into o_test1 values('1','1234 ');
insert into o_test1 values('1','1234 ')
ERROR at line 1:
ORA-12899: value too large for column "SYS"."O_TEST1"."ADDR" (actual: 6,maximum: 5)
KingbaseES:当超出部分是有效的字符的时候,报错。但是,当使用明确的类型转换为最大字符数的时候,截断为最大长度,不报错。
test=# create table k_test5(name char(2), addr varchar(5));
CREATE TABLE test=# insert into k_test5 values('123', '12345');
错误: 对于字符类型来说这个值太长了(2) test=# insert into k_test5 values('12 ', '12345');
错误: 对于字符类型来说这个值太长了(2) test=# insert into k_test5 values(102::char(2) , '12345');
INSERT 0 1 test=# select * from k_test5;
name | addr
------+-------
10 | 12345 (1 行记录)
参考文档:
[应用开发及迁移]Oracle至KingbaseESV8迁移最佳实践
字符类数据类型和oracle字符类型的区别的更多相关文章
- KingbaseES 时间类型数据和oracle时间类型的区别
Oracle日期时间类型有两类,一类是日期时间类型,包括Date, Timestamp with time zone, Timestamp with local time zone.另一类是Inter ...
- oracle 插入数据之坑--------oracle字符类型varchar2一个中文占多少字节
如果你误认为是两个字节,那就大错特错了 Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定 查看oracle server端字符集 select userenv('langu ...
- 字符输入流Reader类和FileReader和字符输入流读取字符数据
java.io.Reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类 共性成员方法: int read();读取单个字符并返回 int read(char[] ...
- 数据类型和typeof操作符
虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类 ...
- Core Java 总结(字符和字符串类问题)
所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 字符,字符串类问题 正则表达式问题 J ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- 字节流, FileOutputStream类,FileInputStream类,复制文件,字符流
字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节 基本方法: 子类可继承调用以上方法 FileOutputStream类 构造方 ...
- mysql基础-数据类型和sql模式-学习之(三)
0x01 mysql的两种方向: 开发DBA:数据库设计(E-R关系图).sql开发.内置函数.存储历程(存储过程和存储函数).触发器.时间调度器(event scheduler) 运维----> ...
- Java数据类型和MySql数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
随机推荐
- GitLab、Jenkins结合构建持续集成(CI)环境
1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...
- Redis布隆过滤器和布谷鸟过滤器
一.过滤器使用场景:比如有如下几个需求:1.原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中? 解决办法一:将10亿个号码存入数据库中,进行数据库查询,准 ...
- 开发人员要学的Docker从入门到日常命令使用(通俗易懂),专业运维人员请勿点!
一.介绍Docker 1.引言 问题1:开发人员告诉测试说自己的项目已经做好了,给你一个发布包,你去测试吧. ## 测试人员,为什么我运行会报错? ## 开发人员说,我本地运行没有问题呀! 解答 ...
- CF1656E Equal Tree Sums 题解
题目链接 思路分析 自认为是一道很好的构造题,但是我并不会做. 看了题解后有一些理解,在这里再梳理一遍巧妙的思路. 我们先来看这样的一张图: 我们发现当去掉叶子节点的父亲时,剩下树的价值和等于叶子节点 ...
- 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能
前言 最近几乎每天40度,越热越不想面对电脑,还好开源项目都比较稳定没那么多待解决问题,趁着暑假带着女儿学习游泳已略有小成.游泳好处太多了,建议有孩子的都去学学,我是在岸边指导大约一周左右就学会了,目 ...
- 001 Security概述
1.Spring Security概述 Spring Security是用于解决认证与授权的框架 SpringSecurity默认要求所有的请求都是必须先登录才允许的访问 BCrypt加密算法 BCr ...
- day02 Java_变量
参考: 变量的练习: 声明一个变量,一次声明多个变量. 声明变量直接初始化,先声明变量,而后再给变量初始化. 声明整型变量g,声明另一个整型变量h并赋值为h+10,输出变量h的值. 声明整型变量i,在 ...
- 简答一波 HashMap 常见八股面试题 —— 算法系列(2)
请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注 ...
- 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示
市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...
- python中的标识符和保留字
保留字,有一些单词被赋予了特定的意义,这些单词不能作为对象的名字 想要快速获取python中的关键字可以通过以下的程 序来快速实现 import keyword print(keyword.kwlis ...