oracle 数据类型

oracle 数据类型,第1张

概述

通过实例 全面而深入的分析oralce的基本数据类型及它们的存储方式 以ORACLE G为基础 介绍oralce g引入的新的数据类型 让你对oracle数据类型有一个全新的认识 揭示一些不为人知的秘密和被忽略的盲点 从实用和优化的角度出发 讨论每种数据类型的特点 从这里开始oracle之旅!

第一部份 字符类型

§ char

定长字符串 会用空格来填充来达到其最大长度 最长 个字节

. 新建一个测试表test_char 只有一个char类型的列 长度为

SQL> create table test_char(colA char( ));

Table created

. 向这个表中插入一些数据

SQL> insert into test_char values( a );

row inserted

SQL> insert into test_char values( aa );

row inserted

SQL> insert into test_char values( aaa );

row inserted

SQL> insert into test_char values( aaaa );

row inserted

SQL> insert into test_char values( aaaaaaaaaa );

row inserted

注意 最多只能插入 个字节 否是就报错

SQL> insert into test_char values( aaaaaaaaaaa );

insert into test_char values( aaaaaaaaaaa )

ORA : value too large for column PUB_TEST TEST_CHAR COLA (actual: maximum: )

. 使用dump函数可以查看每一行的内部存数结构

SQL> select colA dump(colA) from test_char;

COLA       DUMP(COLA)

a          Typ= Len= :

aa         Typ= Len= :

aaa        Typ= Len= :

aaaa       Typ= Len= :

aaaaaaaaaa Typ= Len= :

注意 Typ= 表示数据类型的ID Oracle为每一种数据类型都进行了编号 说明char类型的编号是

Len = 表示所在的内部存储的长度(用字节表示) 虽然第一例只存了一个字符 a 但是它还是占用了 个字节的空间

表示内部存储方式 可见oracle的内部存储是以数据库字符集进行存储的

正好是字符a的ASCII码

可以使用chr函数把ASCII码转成字符

SQL> select chr( ) from dual;

CHR( )

a

要想知道一个字符的ASCII码 可以使用函数ascii

SQL> select ascii( a ) from dual;

ASCII( A )

正好是空格的ascii码值

Char类型是定长类型 它总会以空格来填充以达到一个固定宽度

使用char类型会浪费存储空间

Oracle的数据类型的长度单位是字节

SQL> select dump( 汉 ) from dual;

DUMP( 汉 )

Typ= Len= :

可见一个汉字在oracle中是占用了两个字节的

英文字母或符号只占用一个字节

Char( )最多可存放 个汉字

§ varchar

是一种变长的字符类型 最多可占用 字节的存储空间

创建一个表 只有一列 类型为varchar 长度为

SQL> create table test_varchar( col varchar ( ));

Table created

插入一些数据

SQL> insert into test_varchar values( a );

row inserted

SQL> insert into test_varchar values( aa );

row inserted

SQL> insert into test_varchar values( aaa );

row inserted

SQL> insert into test_varchar values( aaaaaaaaaa );

row inserted

SQL> insert into test_varchar values( aaaaaaaaaaa );

用dump函数查看每一行的内部存储结构

SQL> select col dump(col) from test_varchar;

COL        DUMP(COL)

a          Typ= Len= :

aa         Typ= Len= :

aaa        Typ= Len= :

aaaaaaaaaa Typ= Len= :

Typ= 说明varchar 类型在oracle中的类型编号为

Len代表了每一行数据所占用的字节数

后面是具体的存储值

由此可见 varchar 是存多少就占用多少空间 比较节省空间的 不会像char那样用空格填充

§ byte 和char

在 g中 字符类型的宽度定义时 可以指定单位

Byte就是字节

Char就是字符

Varchar ( byte) 长度为 个字节

Varchar ( char) 长度为 个字符所占的长度

Char( byte)长度为 个字节

Char( char) 长度为 个字符所占的长度

一个字符占用多少个字节 是由当前系统采用的字符集来决定的

如一个汉字占用两个字节

查看当前系统采用的字符集

SQL> select from nls_database_parameters where parameter = NLS_CHARACTERSET ;

PARAMETER                      VALUE

NLS_CHARACTERSET               ZHS GBK

如果在定义类型时 不指定单位 默认是按byte 即以字节为单位的

采用char为单位的好处是 使用多字节的字符集

比如 在ZHS GBK字符集中 一个汉字占用两个字节

把数据表的某一列长度定义为可存放 个汉字 通过下面的定义就可以了

Create table test_varchar(col_char varchar ( char));

这样相对简单一些 在数据库表设计时需要注意

继续实验 新建一个表 包含两列 一列采用byte为单位 一列采用char为单位

SQL> create table test_varchar (col_char varchar ( char) col_byte varchar ( byte));

Table created

Col_char列 定义为可存放 个字符

Col_byte 列 定义为可存放 个字节的字符

当前的系统采用字符集为ZHS GBK 所以一个字符占两个字节

试着在表中插入一些数据

SQL> insert into test_varchar values( a a );

row inserted

SQL> insert into test_varchar values( 袁 a );

row inserted

SQL> insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 aaaaaaaaaa );

row inserted

SQL> insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 袁袁袁袁袁袁袁袁袁袁 );

insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 袁袁袁袁袁袁袁袁袁袁 )

ORA : value too large for column PUB_TEST TEST_VARCHAR COL_BYTE (actual: maximum: )

第一次 在两列中都插入字符a

第二次 在col_char列插入字符 袁 在col_byte插入字符a

第三次 在col_char列中插入 个中文字符 袁 在col_byte插入 个字符a

第四次 在两列中都插入中文字符 袁 时 报错了 第二列长度不够

再看看每一行的存储结构

SQL> select col_char dump(col_char) from test_varchar ;

COL_CHAR             DUMP(COL_CHAR)

a                    Typ= Len= :

袁                   Typ= Len= :

袁袁袁袁袁袁袁袁袁袁 Typ= Len= :

当我们在col_char列插入 个汉字时 它的长度为

尽管我们在定义的时候是采用varchar ( char)

由此可见 oracle是根据当前数据库采用的字符集 每个字符的所占字节数 X 字段长度来决定了该字段所占的字节数

在本例中 varchar ( char)相当于varchar ( )

不信 我们可以试试看

SQL> desc test_varchar ;

Name     Type         Nullable Default Comments

COL_CHAR VARCHAR ( ) Y

COL_BYTE VARCHAR ( ) Y

当采用多字节的字符集时 定义字段长度还是采用char为单位指定为佳 因为可以避免字段长度的问题

当不知道当前数据库采用的字符集 一个字符占用多少字节时 可以使用lengthb函数

SQL> select lengthb( 袁 ) from dual;

LENGTHB( 袁 )

§ char还是varchar

新建一个表 一列为char类型 一列为varchar 类型

SQL> create table test_char_varchar(char_col char( ) varchar_col varchar ( ));

Table created

向该表中的两列都插入相关的数据

SQL> insert into test_char_varchar values( Hello World Hello World );

row inserted

SQL> select from test_char_varchar;

CHAR_COL             VARCHAR_COL

Hello World          Hello World

以char_col列为条件查询

SQL> select from test_char_varchar where char_col = Hello World ;

CHAR_COL             VARCHAR_COL

Hello World          Hello World

以varchar_col列为条件查询

SQL> select from test_char_varchar where varchar_col = Hello World ;

CHAR_COL             VARCHAR_COL

Hello World          Hello World

似乎char 和varchar类型没有什么两样 再看看下面的语句

SQL> select from test_char_varchar where varchar_col =char_col;

CHAR_COL             VARCHAR_COL

这已经看出他们并不一样 这涉及到字符串比较的问题

因为已经发生了隐式转换 在与char列char_col进行比较时 char_col列的内容已经转换成了char( ) 在Hello World后面以空格进行填充了 而varchar_col列并没有发生这种转换

如果要让char_col列与varchar_col列相等 有两种方法

第一种是 使用trim把char_col列的空格去掉

第二种是 使遥rpad把varchar_col列用空格进行填充长度为 的字符

SQL> select from test_char_varchar where trim(char_col) = varchar_col;

CHAR_COL             VARCHAR_COL

Hello World          Hello World

SQL> select from test_char_varchar where char_col = rpad(varchar_col );

CHAR_COL             VARCHAR_COL

Hello World          Hello World

如果使用trim函数 如果char_col列上有索引 那么索引将不可用了

lishixinzhi/Article/program/Oracle/201311/17771

MySQL数据类型

在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

话不多说,直接上图。

Text 类型:

Number 类型:

-from shulanxt

Date 类型:

bit和byte同译为"比特",都是数据量度单位,两者区别如下:

容量大小不同:bit(比特)是表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。一个Byte由8bits组成,是数据存储的基础单位,1Byte又称为一个字节,用一个字节(Byte)储存,可区别256个数字。

存储数据类型不同:bit是电脑记忆体中最小的单位,在二进位电脑系统中,每一bit可以代表0或1的数位讯号。一个Byte由8bits所组成,可代表一个字元(A~Z)、数字(0~9)、或符号(,!%&+-/),是记忆体储存资料的基本单位,至於每个中文字则须要两Bytes。

SQL数据类型有以下这些:

1、二进制数据类型。

二进制数据包括 Binary、Varbinary 和 Image

Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。

Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4 个字节。

Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4个字节,不是n 个字节。

2、字符数据类型。

字符数据类型包括char、varchar和text。

字符数据是由字母、符号和数字的任意组合组成的数据。

varchar是可变长度字符数据,其长度不超过8kb。char是最大长度为8kb的固定长度字符数据。超过8kb的ASCII数据可以使用文本数据类型存储。

3、Unicode 数据类型。

Unicode数据类型包括nchar、nvarchar和ntext。

在Microsoft SQL Server中,传统的非Unicode数据类型允许使用由特定字符集定义的字符。在安装SQL Server期间,允许选择字符集。

在Unicode标准中,包含由各种字符集定义的所有字符。使用Unicode数据类型占用的空间是使用非Unicode数据类型的两倍。

4、日期和时间数据类型。

日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型。

日期和时间数据类型由有效的日期和时间组成。

例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。

前一个数据类型是日期在前,时间在后。后一个数据类型是时间在前,日期在后。

在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。

5、数字数据类型。

数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点)和整数。

整数由正整数和负整数组成,如39、25、0-2和33967。在Microsoft SQL Server中,存储在整数中的数据类型是int、smallint和tinyint。

int数据类型存储的数据多于smallint数据类型,而smallint数据类型存储的数据多于tinyint数据类型。

使用int数据类型存储数据的范围从-2 147 483 648到2 147 483 647(每个值需要四个字节的存储空间)。

6、货币数据类型。

在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney

Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。

参考资料来源:百度百科-SQL数据类型

sql数据库中的Float数据类型是占几位,几个字节

,也就是占几个0和1

FLOAT数据类型可精确到第15位小数,其范围为从-179e-308到179e+308每个float类型的数据占用8个字节的存储空间。

float数据类型可写为float([n])的形式。n指定Float数据的精度。n为1到15之间的整数值。当n取1到7时,实际上是定义了一个real类

数据库表中字段类型有二进制数据类型、字符数据类型、数字数据类型 等其中类型。具体类型如下所示:

1、二进制数据类型 

Binary、Varbinary、Image 

2、字符数据类型 

Char,Varchar和 Text

3、Unicode数据类型

包括Nchar,Nvarchar和Ntext

4、日期和时间数据类型

包括Datetime, Smalldatetime, Date, TimeStamp

5、数字数据类型

数字数据类型包括正数和负数、小数和整数

6、货币数据类型

表示正的或者负的货币数量。

7、特殊数据类型

特殊的数据类型有3种,即Timestamp、Bit 和 Uniqueidentifier。

以上就是关于oracle 数据类型全部的内容,包括:oracle 数据类型、以下那种类别对应数据的字符类属性、Oracle数据类型及存储方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9786885.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存