为什么80%的码农都做不了架构师?>>>   

1.前几天往数据库表里面插入数据的报了一个这样的错误如下:

SQL> insert into student values('中华人民共和',60);
insert into student values('中华人民共和',60)
                           *

第 1 行出现错误:
ORA-12899: 列 "SYSTEM"."STUDENT"."NAME" 的值太大 (实际值: 12, 最大值: 6)

本来建立表的时候字符长度就设置为6了,可是插入六个中文的时候就是报错,表结构如下:

SQL> desc student;
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
NAME                                               VARCHAR2(6)
AGE                                                NUMBER(3)

后来经过查了大量的资料之后发现,varchar2的长度是有字符集的类型决定的。

内容如下:

varchar2最大是4000字节,那么就看你的oracle字符集,如果字符集是16位编码的,ZHS16GBK,那

么每个字符16位,2字节,可以容纳一个中文字符,所以可以容纳2000字符。如果是AL32UTF8编码的字符集,三个字节为一个中文字符,那么只能存储 1333个字符。

2.查看字符集的类型的语句:

SQL> set wrap off;
SQL> select parameter,value from nls_database_parameters where parameter like 'NLS_CHARACTERSET';

PARAMETER                      VALUE
------------------------------ -------------------------------------------------
NLS_CHARACTERSET               ZHS16GBK

所以上面插入的字符就只能是3个中文字符。

如果将上面的字符编码改为32位编码的,则只能存入1.5个中文字符。

3.10 查看新建数据库的字符集设置

SQL> set wrap off
SQL> set lines 1000
SQL> select * from nls_database_parameters;

4.可以用update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'; 
来修改字符集

5.如果字符集为AL32UTF8,可以看出下面的例子为,每个中文占用三个字节。

SQL> select lengthb('中') from dual;

LENGTHB('中')
-------------
            3

为此,可以在定义列的大小的时候通过附加BYTE或者CHAR 关键字,已来指示字段是占用的的字节数还是字符数。对于开始提出的问题,我们可以使用VARCHAR2(6 CHAR),那么就可以存储6个中文字符了。

转载于:https://my.oschina.net/hc24/blog/292337

[转]Oracle中字符集的类型决定varchar2的字符长度相关推荐

  1. oracle utf8 varchar,Oracle中字符集的类型决定varchar2的字符长度

    1.前几天往数据库表里面插入数据的报了一个这样的错误如下: SQL> insert into student values('中华人民共和',60); insert into student v ...

  2. ORACLE中的INTERVAL类型

    ORACLE中的INTERVAL类型 INTERVAL数据类型用来存储两个时间戳之间的时间间隔.可以指定years and months,或者days,hours,minuts,seconds之间的间 ...

  3. oracle中定义表类型数据,oracle 定义表字段域的数据类型

    /****************************************************************************/ >oracle定义表字段域的数据类型 ...

  4. oracle锁类型tx,Oracle中的锁类型

    Oracle中的锁类型主要分以下3种: DML锁(DML lock):DML 代表数据操纵语言(Data Manipulation Language).一般来讲,表示select,insert,upd ...

  5. Oracle中的TIMESTAMP类型解读(TIMESTAMP存储格式)

     Oracle中的TIMESTAMP类型解读  SQL> create table test_time (col_time timestamp); 表已创建. SQL> insert in ...

  6. Oracle中的Raw类型解释

    CAST 将某种数据类型的表达式显式转换为另一种数据类型. RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节.  LONG R ...

  7. oracle中的blob类型,clob类型,nclob类型主要区别是什么

    1.BLOB全称为二进制大型对象(Binary Large Object).它用于存储数据库中的大型二进制对象.可存储的最大大小为4G字节 2.CLOB CLOB全称为字符大型对象(Character ...

  8. 交叉报表列头排序时遇到的oracle问题—oracle ORA-12704:字符集不匹配、varchar2转化为nvarchar2字符缺失、case when else后的字符类型要一致...

    在做交叉报表列头的排序时,遇到这三个问题,下面具体来说一下. 设计的数据库的表结构如图1所示: 图1 要处出来student_name_,s.grade_,s.subject_name_,这三个属性, ...

  9. 【转】mysql 、oracle中char和varchar以及varchar2的区别

    mysql char是固定长度,varchar是可变长度的,varchar2是oracle特有的. char定长存储,速度快,但是存在一定空间的资源浪费,适用于存储字段不是很大.对速度要求高的场合.速 ...

最新文章

  1. 全国大学生智能车智能汽车竞赛车模检查规范
  2. PHP绕过disable_function限制(一)
  3. Java性能优化指南,及唯品会的实战
  4. IAR需要注意的地方
  5. 安装squid_「首席推荐」设置Squid转发代理或者正向代理
  6. 【Java】如何较好地将int转化成String
  7. 浅谈分布式消息技术 Kafka
  8. 如何使用Orchard搭建敏捷个人的网站(2)
  9. 【NLP】一文了解词性标注CRF模型
  10. java 进度条 百分比_java怎么让进度条带百分数
  11. 用c语言编写6位计算器,用c语言编写易简计算器.doc
  12. FreeRTOS信号量
  13. 星际争霸1终于可以在win10上运行了
  14. Mac下ImageMagick安装(libpng)
  15. nginx文件服务器5万并发量,Nginx服务器高性能优化-轻松实现10万并发访问量
  16. 迅捷CAD编辑器是不错的PDF转换CAD软件
  17. PHP高级工程面试题汇总(2018.05)
  18. 三菱FX3U PID恒速控制变频器实例 编码器测电机转速,当负载变化引起转速变化
  19. JAI转换文件格式,并解决stream不能释放报错问题
  20. 基于React的IP输入框实现

热门文章

  1. 贝叶斯方法(Bayesian approach) —— 一种概率解释(probabilistic interpretation)
  2. 0603学术诚信与职业道德
  3. (转自ztp800201) Android - 自定义标题栏(在标题栏中增加按钮和文本居中)
  4. Tomcat中的Out Of Memory错误
  5. 工作两年多的一个菜鸟感想
  6. 使用tomcat时,Add and Remove出现异常
  7. IDEA查看Java类的UML关系图
  8. Maven生命周期和插件的那些事(2021版)
  9. mysql创建数据库schooldb_mysql创建新用户和数据库
  10. python3 compile_python3.2的pycompile