`
xmarkgogo
  • 浏览: 29564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle数据库的varchar2(2)存储一个汉字时提示插入汉字过长问题

阅读更多

昨天在oracle实验课上出现了如题所示的问题:varchar2(2)在存储一个汉字时,提示插入汉字过长,要把它改成3才能存储1个汉字。于是百度google之。

先做以下实验:

建一个简单的表var,只有一列name,数据类型为varchar2(6),并向表中插入一条数据。

create table var (name varchar2(6));
insert into var values('测试');

查询插入的数据,并且同时查看name列的字符长度和字节长度。结果如下图:

select u.name, length(u.name), lengthb(u.name)
from var u;

从结果中可以看出,一个汉字占了三个字节,而不是两个,这跟字符集有关。

查看字符集的代码和结果如下:

select userenv('language') from dual;

结果显示,本机Oracle的字符集是UTF-8,32位,而不是GBK的16位。UTF-8的每个字符占3个字节(bytes),可以通过修改默认字符集来实现varchar2(2)存储一个汉字。方法如下:

SHUTDOWN IMMEDIATE;  
STARTUP MOUNT; 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER DATABASE OPEN; 
ALTER DATABASE CHARACTER SET AL32UTF8/ZHS16GBK;
SHUTDOWN IMMEDIATE;

STARTUP;

主要参考资料:http://dev.tot.name/db/html/20090322/20090322131055.htm
附:

ORACLE nvarchar2和varchar2的区别

1、NVARCHAR2中存储中文字时,一个中文字当一个字符来处理
NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
2、而VARCHAR2中一个中文字当两个字符来处理
VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个

Oracle中nvarchar2和varchar2的共同点:
不定长存储,当存储信息长度小于指定的长度,那么就已实际存入的长度为准这一点不像varchar这种定长存储那样浪费空间,比如varchar 指定是10个字符,那么存入5个字符的时候,他会自动填充空格来补齐以达到指定的长度



分享到:
评论

相关推荐

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

    oracle中varchar2(byte)和varchar2(char) 细节决定成败,大家在设计数据库建表的时候一定要注意。

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    oracle数据库表结构转gp数据库表结构、转mysql、数据库时表字段长度问题

    oracle char,varchar,varchar2的区别和使用方法

    oracle char,varchar,varchar2的区别和使用方法 非本人总结,但是说的挺好的! 欢迎下载

    oracle数据库修复

    支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 全面支持LOB字段: 支持CLOB、NCLOB和BLOB CLOB...

    赤兔Oracle数据库恢复软件 v11.6.zip

    软件功能强大,持修复因各种原因造成的数据库无法打开或数据库删除后没有备份的问题,从而实现对Oracle数据库的抢修恢复,最大限度减少数据丢失。是用户实现Oracle数据库抢修恢复的好帮手。需要的朋友快来下载吧! ...

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    oracle通过1条语句插入多个值的方法示例

    今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2),(2,3),(3,4); 这条语句在mysql中执行的话,语法一点毛病都没有,但是,在oracle上...

    Oracle数据库试题.docx

    实例 在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME VARCHAR2(25) EMAIL VARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名(C)。 A.SELECT name FROM teacher WHERE email = NULL; B....

    varchar 和varchar2之间的联系和区别

    为了方便更好的设计数据库,特意为用户讲述了以下它们呢之间的关系!

    浅析Oracle中char和varchar2的区别 电脑资料.docx

    浅析Oracle中char和varchar2的区别 电脑资料.docx

    ORACLE数据库sql语言 、函数及常用命令

    如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。 如果一个列允许为空,该列可以不放任何内容,即空值(在SQL中书写为NULL),空值不是空格。 如果一个列内容为空值,则该列不...

    浅析Oracle中char和varchar2的区别

    char是定长的 char(10) varchar2(10) 同样存 a ,char占用了10个字符,varchar2 只占用了 一个字符(一个中文占两个字符,英文占一个)。 但是char的查询速度要比varchar2快。varchar2,Oracle还要进行语法分析,这...

    Oracle数据库SQL基本应用与介绍

    文字列型:CHAR、nchar、varchar2、nvarchar2、long 数值型:number、integer、float、int等。 日期型、期间型:date、timestamp、timestamp with time zone等。 Oracle数据库对象:cluster、数据库联接、触发器、...

    Oracle数据库学习笔记

    向你介绍我的Oracle数据库学习笔记 1.SQL命令: SQL 支持4大类型命令: 数据定义语言(DDL): Create(创建), Alter(更改), Drop(删除). 数据操纵语言(DML): Select(选择), Insert(插入), ...

    Oracle数据库课程设计报告(1).doc

    课 程 设 计 报 告 书 目 录 第1章 引言 3 第2章 概要设计 5 2.1系统需求分析 5 2.2系统结构设计 5 2.3系统功能模块 6 第3章 数据库分析 7 3.1 数据库总体设计 7 3.2 数据表设计 7 3.3 数据库的创建 8 3.4存储过程...

    Oracle数据库使用及命名规则的详解

     同一语句不同部分的缩进,如果为sub statement,则通常为2个空格,如果与上一句某部分有密切联系的,则缩至与其对齐:  BEGIN  FOR v_TmpRec IN  (SELECT login_id,  gmt_created, -- here indented as ...

    函数进行BLOB转换Varchar2.txt

    Oracle SQL 函数进行BLOB转换Varchar2

    最新手机号码归属地数据库(oracle)496398万

    1、数据为oracle导出SQL文件,可直接导入到oracle数据库。 2、内容包括手机号码前7位号段,所属省市,卡类型,所属区号,可通过多个纬度方便数据统计。 3、数据共496398万,为2023年03月更新。 表结构如下 CREATE ...

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。 ODU有什么功能特点...

    运用log4net将日志信息保存到Oracle数据库

    1:创建一个辅助类:SystemLog.cs 2: 创建Global.asax,里面设置相关代码 void Application_Start(object sender, EventArgs e) { //在应用程序启动时运行的代码 PDAManage.SystemLog.SetConfig(); } 3:在页面...

Global site tag (gtag.js) - Google Analytics