博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
参数NLS_LENGTH_SEMANTICS的设置问题
阅读量:6372 次
发布时间:2019-06-23

本文共 1879 字,大约阅读时间需要 6 分钟。

hot3.png

参数NLS_LENGTH_SEMANTICS的设置问题 

在Oracle数据库中和Oracle FORM中都 有这样一个参数的设置,有必要澄清一下:

参数NLS_LENGTH_SEMANTICS的含义在Oracle文档中这样描述: 

Oracl文档中的说明: Syntax: NLS_LENGTH_SEMANTICS = string Range of values: BYTE | CHAR NLS_LENGTH_SEMANTICS enables you to create CHAR and VARCHAR2 columns using either byte or character length semantics. Existing columns are not affected. NCHAR, NVARCHAR2, CLOB, and NCLOB columns are always character-based. You may be required to use byte semantics in order to maintain compatibility with existing applications. NLS_LENGTH_SEMANTICS does not apply to tables in SYS and SYSTEM. The data dictionary always uses byte semantics. 
翻译过来的意思就是该参数有BYTE和CHAR两种取值,使你能够使用这两种语义创建CHAR或VARCHAR2类型的数据库表列,而对现有的列没有影响。 
二者的区别就是一个是按字符存放,另一个按字节存放;

一般情况数据库都会使用UTF-8编码,一个汉字如果按字节存放,就需要3个字节。

可以看到数据库中参数NLS_LENGTH_SEMANTICS的设置 ,一般默认为‘BYTE’。 

这是因为按字节存放,3个汉字就需要9个字节,如果把参数NLS_LENGTH_SEMANTICS设置为‘CHAR’,就可以将数据插入进去了。这是因为按数据库会按字符计数,而不是字节。 
Oracle Form中: 
ITEM属性设置 中也有Data Length Semantics这样一个属性设置,它有三种选择“NULL”、“CHAR”和“BYTE”,如果设置 为“NULL”则直接从数据库中获取,使用数据库的设置。设置为“CHAR”和“BYTE”则和上述数据库中的情况一样。经过测试发现,如果一个字符类型的ITEM的最大长度为100,则当Data Length Semantics设置为“CHAR”时,最多可以输入100个汉字或100个英文字符;当Data Length Semantics设置为“BYTE”时,最多可以输入33个汉字或100个英文字符。 
举例如下: 
SQL> show parameter nls_length 
NAME TYPE VALUE

nls_length_semantics string BYTE 

SQL> create table byte_test (a varchar2(3)); 
表已创建。 
SQL> insert into byte_test values(‘甲骨文’); 
insert into byte_test values(‘甲骨文’) 
ERROR 位于第 1 行: 
ORA-01401: inserted value too large for column 
SQL> alter session set NLS_LENGTH_SEMANTICS=’CHAR’; 
会话已更改。 
SQL> create table char_test (a varchar2(3)); 
表已创建。 
SQL> insert into char_test values(‘甲骨文’); 
已创建 1 行。 
SQL> show parameter NLS_LENGTH_SEMANTICS 
NAME TYPE VALUE

nls_length_semantics string CHAR 

SQL> desc byte_test; 
名称 是否为空? 类型

A VARCHAR2(3 BYTE) 

SQL> desc char_test; 
名称 是否为空? 类型

A VARCHAR2(3)

转载于:https://my.oschina.net/u/3862440/blog/2051943

你可能感兴趣的文章
Debian8添加kali源并安装metasploit
查看>>
Linux redhat 5.7 安装 Teamviewer7
查看>>
android EditText inputType说明
查看>>
交叉熵代价函数(作用及公式推导)
查看>>
这个用markdown编写
查看>>
display、 float 、position
查看>>
centos7.4 安装LAMP环境
查看>>
poj 1821 Fence(单调队列)
查看>>
关于Map集合的遍历总结
查看>>
【计数】【UVA11401】 Triangle Counting
查看>>
Django建站纪要(一)——做个blog
查看>>
(实现)vue.js最简实现
查看>>
RabbitMQ发送消息成功,但是接受不到消息
查看>>
nova-network创建初始化网络
查看>>
虎符遥控器(PPT遥控翻页)
查看>>
Java常用缩略词
查看>>
Java构造块,静态代码块,构造方法执行顺序
查看>>
3D打印开源切片软件Cura配置步骤
查看>>
c++读取TXT文件内容
查看>>
EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
查看>>