`
accphc
  • 浏览: 125131 次
  • 性别: Icon_minigender_1
  • 来自: CD
社区版块
存档分类
最新评论

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

阅读更多

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个中文字符了。

 

分享到:
评论

相关推荐

    oracle 中文字符集问题

    #### 一、Oracle字符集概述 在Oracle环境中,字符集用于定义如何表示和存储字符数据。一个完整的字符集由语言(Language)、地区(Territory)和编码(Charset)三部分组成。例如,`NLS_LANG=AMERICAN_AMERICA.ZHS...

    oracle中varchar2(byte)和varchar2(char).doc

    在Oracle数据库中,`VARCHAR2`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`或`CHAR`。这两种方式看似细微的差别,实际上却对数据存储、性能优化以及...

    Oracle接收长度大于4000的字符串

    在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...

    oracle修改字符集,解决乱码问题.

    oracle修改字符集,解决乱码问题.

    Oracle 字符集的查看和修改

    总的来说,理解Oracle字符集对于数据库的管理和维护至关重要。正确选择和配置字符集可以确保数据的准确性和兼容性,避免字符乱码或数据丢失的问题。在进行数据库迁移或跨语言环境操作时,对字符集的深入理解更是必不...

    oracle数据库的字符集

    1. **字符集 (CHARACTER SET)**:用于存储CHAR、VARCHAR2、CLOB、LONG等类型的数据。此外,还用于标识表名、列名以及PL/SQL变量等。 2. **国家字符集 (NATIONAL CHARACTER SET)**:用于存储NCHAR、NVARCHAR2、NCLOB...

    Oracle_字符集的查看和修改

    - **字符集** 用于存储 CHAR、VARCHAR2、CLOB、LONG 等类型数据,以及标识表名、列名等。 - **国家字符集** 主要用于存储 NCHAR、NVARCHAR2、NCLOB 等类型数据。在 Oracle 9i 中,国家字符集被限定为 Unicode 编码中...

    oracle字符集查看与修改.pdf

    * 字符集用来存储 CHAR, VARCHAR2, CLOB, LONG 等类型数据,用于标示诸如表名、列名以及 PL/SQL 变量等,用于存储 SQL 和 PL/SQL 程序单元等。 * 国家字符集用以存储 NCHAR, NVARCHAR2, NCLOB 等类型数据,国家字符...

    理解ORACLE数据库字符集

    - 字符集:用于存储CHAR、VARCHAR2、CLOB、LONG等类型的数据,以及表名、列名和PL/SQL变量等标识符。 - 国家字符集:专为NCHAR、NVARCHAR2、NCLOB等类型设计,以支持亚洲语言的定长多字节编码。在Oracle9i之后,国家...

    理解Oracle数据库字符集

    - **字符集**:在创建数据库时指定,用于存储CHAR、VARCHAR2、CLOB、LONG等类型数据,以及标识表名、列名和PL/SQL变量等。 - **国家字符集**:用于存储NCHAR、NVARCHAR2、NCLOB等类型数据,特别是在处理亚洲语言时...

    Oracle字符集问题

    Oracle字符集是数据库管理系统Oracle中处理字符数据的关键组成部分,它定义了如何存储和显示各种语言的字符。Oracle字符集问题通常出现在数据库创建、数据输入、数据传输或在不同字符集的系统之间交互时。理解Oracle...

    ORACLE数据库字符集设置

    本文将详细介绍如何在ORACLE数据库中正确配置字符集,以及遇到字符集问题时的解决策略。 #### 二、ORACLE数据库中的字符集概念 在ORACLE数据库中,字符集主要分为两大类:NLS_CHARACTERSET和NLS_NCHAR_...

    ORACLE数据库字符集[参考].pdf

    数据库字符集在数据库创建时确定,通常不可更改,用于存储CHAR、VARCHAR2、CLOB、LONG等数据类型,同时也用于标识表名、列名和PL/SQL变量。国家字符集则是用于存储NCHAR、NVARCHAR2、NCLOB等类型的数据,它是对...

    ORACLE字符集浅析——异种字符集数据库间的数据存取方法探讨.pdf

    Oracle字符集是数据库管理系统Oracle中的一个关键概念,用于定义数据的编码方式,使得数据库能够存储和处理各种语言的字符。本文主要探讨了在不同字符集的Oracle数据库间如何有效地进行数据存取。Oracle的全球化支持...

    Oracle字符集研究1.ppt

    Oracle字符集是数据库管理系统Oracle中用于表示和存储文本数据的关键组成部分。字符集定义了一组特定符号的编码方式,使得计算机能够识别和处理各种语言的文字。本篇将深入探讨Oracle字符集的基本概念、分类以及在...

    修改数据库字符集修改数据库字符集.doc

    本地字符集用于存储常规的字符数据,如VARCHAR2类型,而国际字符集则用于存储如NCLOB、NCHAR、NVARCHAR2等支持Unicode的数据类型。 以下是修改数据库字符集的步骤: 1. **GBK字符集的更改**: 在这个过程中,首先...

    oracle10g字符集的查看与修改.doc

    首先,Oracle字符集分为单字节和多字节编码。单字节字符集如US7ASCII,用于表示128个基本的ASCII字符,而8位的单字节字符集如WE8ISO8859P1则能表示更多的欧洲字符。多字节字符集主要用于处理亚洲语言,如变长的AL32...

    Oracle字符集研究.pptx

    Oracle字符集是数据库管理系统Oracle中用于表示和存储文本数据的关键组件。字符集定义了一套特定符号的编码方式,将字符映射为不同的数值。Oracle最初支持的字符集是US7ASCII,它是一个单字节7位字符集,能表示128个...

Global site tag (gtag.js) - Google Analytics