对Oracle 数据类型的全新认识


  本文标签:Oracle 数据类型

  本文主要介绍的是Oracle 数据类型,通过实例的演示,我们将全面分析Oralce的基本的数据类型以及它们不同的存储方式  。我们现在就以Oracle 10G作为为基础,来介绍oralce 10g引入新的数据类型  。

  让你对Oracle数据类型有一个全新的认识  。揭示一些不为人知的秘密和被忽略的盲点  。从实用和优化的角度出发,讨论每种Oracle 数据类型的特点  。从这里开始Oracle之旅!

  

  第一部份 字符类型

  

  1.1 char

  

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

  

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

  

  1. SQL> create table test_char(colA char(10));  
  2. Table created  

  

  

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

  

  

  1. SQL> insert into test_char values(a);  
  2. 1 row inserted  
  3. SQL> insert into test_char values(aa);  
  4. 1 row inserted  
  5. SQL> insert into test_char values(aaa);  
  6. 1 row inserted  
  7. SQL> insert into test_char values(aaaa);  
  8. 1 row inserted  
  9. SQL> insert into test_char values(aaaaaaaaaa);  
  10. 1 row inserted  

  

  

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

  

  1. SQL> insert into test_char values(aaaaaaaaaaa);  
  2. insert into test_char values(aaaaaaaaaaa)  
  3. ORA-12899: value too large for column "PUB_TEST".
    "TEST_CHAR"."COLA" (actual: 11, maximum: 10)  

  

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

  

  1. SQL> select colA, dump(colA) from test_char;  
  2. COLA DUMP(COLA)  
  3. Typ=96 Len=10: 97,32,32,32,32,32,32,32,32,32  
  4. aa Typ=96 Len=10: 97,97,32,32,32,32,32,32,32,32  
  5. aaa Typ=96 Len=10: 97,97,97,32,32,32,32,32,32,32  
  6. aaaa Typ=96 Len=10: 97,97,97,97,32,32,32,32,32,32  
  7. aaaaaaaaaa Typ=96 Len=10: 97,97,97,97,97,97,97,97,97,97  

  

  

  注意:Typ=96 表示Oracle 数据类型的ID  。Oracle为每一种数据类型都进行了编号  。说明char类型的编号是96. Len =10 表示所在的内部存储的长度(用字节表示)  。虽然第一例只存了一个字符’a’,但是它还是占用了10个字节的空间  。 97,32,32,32,32,32,32,32,32,32 表示内部存储方式  。

  可见Oracle的内部存储是以数据库字符集进行存储的  。 97正好是字符a的ASCII码  。 可以使用chr函数把ASCII码转成字符  。