区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
何时该用CHAR,何时该用varchar2?
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。
转自:http://www.iteye.com/topic/125204
varchar2最大是4000字节,那么就看你的oracle字符集,如果字符集是16位编码的,ZHS16GBK,那么每个字符16位,2字节,所以可以容纳2000字符。
如果是32位编码的字符集,那么只能存储 1000个字符。
从后面的例子的 length(字符长度)和lengthb(字节长度)的差别就可以看出来了。
create table T_BOARD( NAME VARCHAR2(50)
insert into T_BOARD values ('测试');
select t.name,length(t.name),lengthb(t.name) from t_board t
字符集合决定varchar2的长度
问题描述:
intert into T_BOARD values('超过17个汉字');
报错:插入字符过长!发现一个汉字占3个字节,所以报错!!!
问题所在:
使用的字符集是UTF8,就有可能出现这个错误!
使用命令查看:
SQL> select parameter,value from nls_database_parameters where parameter like 'NLS_CHARACTERSET';
PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
AL32UTF8
解决方法:
建议使用ZHS16GBK字符集!
操作:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET AL32UTF8/ZHS16GBK;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
转自:http://dev.tot.name/db/html/20090322/20090322131055.htm
分享到:
相关推荐
### VARCHAR与VARCHAR2之间的联系和区别 在数据库设计与应用中,正确理解并选择合适的数据类型对于确保数据的准确存储及高效查询至关重要。在Oracle数据库中,`VARCHAR`与`VARCHAR2`是两种常见的用于存储可变长度...
### Oracle中的VARCHAR2(BYTE)与VARCHAR2(CHAR)区别详解 #### 一、引言 在Oracle数据库中,`VARCHAR2`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`...
今天我们将深入探讨三种常见的字符串类型:`char`、`varchar`和`varchar2`,它们在不同的数据库系统中有着微妙的区别。 1. **char类型** `char`是一种固定长度的字符串类型,无论实际存储的数据是否填满指定长度,...
### Oracle CHAR, VARCHAR, VARCHAR2 的区别与使用方法 在 Oracle 数据库中,字符串类型是极为常见的数据类型之一,主要用于存储文本数据。其中最常用的三种类型包括:`CHAR`, `VARCHAR`, 和 `VARCHAR2`。这三种...
Oracle 中 char 和 varchar2 的区别 Oracle 中 char 和 varchar2 是两种常用的字符串数据类型,它们之间的区别是很多开发者经常忽视的。下面我们将详细分析 Oracle 中 char 和 varchar2 的区别。 首先,char 是定...
Oracle SQL 函数进行BLOB转换Varchar2
在Oracle数据库中,VARCHAR2()和NVARCHAR2()都是用于存储可变长度的字符串数据类型,但它们之间存在显著的差异,主要涉及到字符编码和存储方式。 首先,VARCHAR2()类型是Oracle数据库中最常见的字符串类型,它允许...
本文主要探讨的是两种常见字符串类型:`CHAR`和`VARCHAR2`,它们在使用上有何不同,并且会涉及一些相关的Oracle数据库功能。 首先,`CHAR`是定长字符串类型,这意味着当你声明一个`CHAR(10)`字段时,无论你存储的...
在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...
Create or Replace Function f_StrCat( as_input Varchar2 ) Return Varchar2 PARALLEL_ENABLE AGGREGATE USING strcat_type; / Grant Execute on f_StrCat To Public; --End of 使用聚合函数实现 多行合并 ...
CREATE OR REPLACE PROCEDURE insert_administrator (p_admin_id VARCHAR2, p_name VARCHAR2, p_gender VARCHAR2) IS BEGIN INSERT INTO administrators (admin_id, name, gender) VALUES (p_admin_id, p_name, ...
然而,实际上MySQL的`VARCHAR`类型在存储时会额外使用1到2个字节来记录字符串的长度,这意味着即使使用UTF-8编码,`VARCHAR(50)`仍能存储50个英文字符或16个中文字符。 在MySQL 5.1及以上版本中,`VARCHAR`的最大...
- **附件路径(PHYSICAL_FILENAME)**: `VARCHAR2(255)` 类型,不可为空,存储实际存储在服务器上的文件路径。 - **原文件名(REAL_FILENAME)**: `VARCHAR2(255)` 类型,不可为空,保存原始文件的名称。 - **下载...
Tq Varchar2(20) 管理员或员工 kqb 表 属性 数据类型 说明 Kqbh Number 记录编号 Kqsj Varchar2(20) 考勤时间 Lb Varchar2(20) 类别 Ygxm Varchar2(20) 员工姓名 Kqsd Varchar2(20) 考勤时段 Kqsm Varchar2(20) 说明...
1、人员信息表(EG_BS_EMP),,, 字段,类型,约束,备注 MARK_NO,VARCHAR2(6),N,卡号 EMPL_CODE,VARCHAR2(6),Y,员工代码 SALARY_ID,VARCHAR2(10),Y,工资号 EMPL_NAME,VARCHAR2(10),Y,员工姓名 SEX_CODE,VARCHAR2(1),Y,...
在Oracle数据库中,varchar2类型的字段长度可高达4,000个字符,但在特定情况下,如使用BLOB存储,可以扩展到更大的值。当从Oracle迁移到MySQL或GP时,可能需要调整字段长度以适应目标数据库的限制。例如,如果源...
可以将创建表的语句直接拷贝值sqldbx(连接db2数据库的工具)中修改字段的类型,如varchar2转化为varchar,number转化为integer。还有primary key、unique的变化。 2、表数据迁移 在Plsql中选择表——>右键——>qurey...
orderuserid VARCHAR2(20), orderusername VARCHAR2(32), orderusertel VARCHAR2(20), adminworkno VARCHAR2(64), orderrequire CLOB, orderstatus INTEGER, weddingtdate DATE, userid VARCHAR2(20), ...