开发环境中:有的表中字段类型定义为varchar2(20)有的表中字段类型定义为varchar2(20 byte)
varchar2(20)和varchar2(20 byte)是否相同呢?
相不相同是由数据库的参数NLS_LENGTH_SEMANTICS决定的,有两个单位,char(字符)或者字节(byte),该参数默认值为BYTE。
所以说,在默认情况下 varchar2(20) = varchar2(20 byte)。如果参数值为CHAR 就不相等。
建议:使用统一的格式如:varchar2(20)
演示:
SQL> show parameter nls_length_semantics;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics string BYTE
SQL> create table tab1 (
2 id number(10),
3 description varchar2(20)
4 );
Table created.
SQL> create table tab2 (
2 id number(10),
3 description varchar2(20 char)
4 );
Table created.
SQL> desc tab1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
DESCRIPTION VARCHAR2(20)
SQL> desc tab2;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
DESCRIPTION VARCHAR2(20 CHAR)
SQL> alter session set nls_length_semantics=char;
Session altered.
SQL> create table tab3 (
2 id number(10),
3 description varchar2(20)
4 );
Table created.
SQL> desc tab1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
DESCRIPTION VARCHAR2(20 BYTE)
SQL> desc tab2;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
DESCRIPTION VARCHAR2(20)
SQL> desc tab3;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
DESCRIPTION VARCHAR2(20)
注意:对于SYS和SYSTEM而言不受该NLS_LENGTH_SEMANTICS影响,始终为BYTE
请不要随意修改SYSTEM级别的NLS_LENGTH_SEMANTICS,否则一些成品套件例如EBS将可能无法正常运行。
相关推荐
### Oracle中的VARCHAR2(BYTE)与VARCHAR2(CHAR)区别详解 #### 一、引言 在Oracle数据库中,`VARCHAR2`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`...
### Oracle CHAR, VARCHAR, VARCHAR2 的区别与使用方法 在 Oracle 数据库中,字符串类型是极为常见的数据类型之一,主要用于存储文本数据。其中最常用的三种类型包括:`CHAR`, `VARCHAR`, 和 `VARCHAR2`。这三种...
在Oracle数据库中,`VARCHAR`与`VARCHAR2`是两种常见的用于存储可变长度字符串的数据类型。尽管它们在名称上相似,但在实际应用中却存在一定的差异。本文将详细介绍这两种数据类型的特性及其应用场景,帮助读者更好...
Oracle 中 char 和 varchar2 的区别 Oracle 中 char 和 varchar2 是两种常用的字符串数据类型,它们之间的区别是很多开发者经常忽视的。下面我们将详细分析 Oracle 中 char 和 varchar2 的区别。 首先,char 是定...
2. varchar 转 date 使用 to_date 函数可以将 varchar 类型转换为 date 类型。例如: ```sql select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; ``` 这将字符串形式的日期和时间转换为 ...
例如,MySQL的`VARCHAR2`对应Oracle的`VARCHAR2`,但MySQL的`TINYINT`在Oracle中可能是`NUMBER(3)`,`BLOB`和`CLOB`在两个系统中都有,但处理方式不同。 3. **对象权限和安全模型**: MySQL的权限管理相对简单,而...
Oracle SQL 函数进行BLOB转换Varchar2
Oracle支持多种数据类型,如`NUMBER`(包含整数和小数)、`VARCHAR2`(可变长度字符串)、`CHAR`(固定长度字符串)、`DATE`(日期和时间)、`BLOB`(大对象,如图片或文档)、`CLOB`(字符大对象)等。理解这些...
- 数据类型:例如,MySQL的`VARCHAR2`在Oracle中是`VARCHAR2`,但MySQL的`TINYINT`对应Oracle的`NUMBER(3)`。 - 约束定义:Oracle使用`CONSTRAINT`关键字定义约束,而MySQL可以直接在列定义中指定。 - 表空间:...
- **字符类型**:Oracle的`CHAR`和`VARCHAR2`与DB2的`CHAR`和`VARCHAR`类似,但长度限制不同。 - **数值类型**:Oracle的`NUMBER`类型根据精度和小数位数的不同,可以映射到DB2的`SMALLINT`、`INTEGER`、`BIGINT`、`...
- **字符类型**:如VARCHAR2、CHAR和CLOB。 - **日期/时间类型**:如DATE和TIMESTAMP。 4. **索引和约束** - **索引类型**:包括B-tree、位图和反向键索引。 - **约束类型**:如PRIMARY KEY、FOREIGN KEY、...
`varchar2`是Oracle数据库独有的字符串类型,与`varchar`类似,也是可变长度的。然而,`varchar2`在Oracle中有一些额外的限制和优化。例如,`varchar2`的最大长度通常小于`varchar`,并且Oracle对`varchar2`的数据...
5. MySQL 与 ORACLE 区别 - 功能上:Oracle 提供更多高级特性,如更复杂的数据类型、分区表等。 - 性能上:Oracle 在大型企业级应用中通常表现出更高的性能。 - 价格上:Oracle 通常比 MySQL 成本更高,尤其在...
例如,在 DB2/400 中,我们可以使用定长的 CHAR(N)类型与 Oracle 的 VARCHAR2(n)相对应,这样可以提高效率和节省存储空间。 四、LOB 类型 DB2/400 提供 VARCHAR 和 CLOB 与 Oracle 中的 RAW 和 LONG RAW 相...
### ORACLE与DB2的区别和转换 #### 一、简介 在数据库领域,Oracle和DB2都是非常流行的数据库管理系统。它们各自具有独特的特性和优势,并且广泛应用于不同的业务场景中。对于那些需要在Oracle和DB2之间进行数据...
- **字符数据类型**:Oracle 使用 `CHAR` 和 `VARCHAR2`,其中 `VARCHAR2` 是变长字符类型,最大长度为 4KB;而 SQL Server 使用 `CHAR` 和 `VARCHAR`,`VARCHAR` 的最大长度为 8KB。 - **变长字符类型**:Oracle ...
但要注意,Oracle可能需要不同的数据类型映射,例如,MySQL的VARCHAR2可能需要转换为Oracle的VARCHAR2。 5. **使用转换工具**:为了简化上述过程,存在专门的工具,如压缩包中的`mysq2oracn.exe`。这种工具可以自动...
- 数据类型:熟悉Oracle9i支持的各种数据类型,如CHAR、VARCHAR2、NUMBER、DATE等。 - 表的创建与管理:掌握CREATE TABLE语句,包括约束(如NOT NULL、UNIQUE、FOREIGN KEY、PRIMARY KEY)的使用。 2. **性能优化...
Oracle 和 DB2 是两种广泛应用的关系型数据库管理系统,它们在语法和功能上存在一些差异。以下是对两者主要区别的详细分析: 1. 取前 N 条记录: - Oracle 使用 `SELECT * FROM TableName WHERE ROWNUM ;` - DB2 ...