SQL varchar2(n BYTE|CHAR) 默认 -> CHAR 或 BYTE
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7477564/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
varchar2(n BYTE|CHAR) default -> CHAR or BYTE
提问by user918229
I am supporting code that has below schema declaration:-
我支持具有以下架构声明的代码:-
create table sample (
id number Primary key,
username varchar2(100),
);
I looked up on Oracle documentation & varchar2 has two declaration modes varchar2(n BYTE) and varchar2(n CHAR), If I don't specify explicitly BYTE or CHAR & just declare username varchar2(500) then will 500 BYTES be allocated or 500 characters?
我查看了 Oracle 文档 & varchar2 有两种声明模式 varchar2(n BYTE) 和 varchar2(n CHAR),如果我没有明确指定 BYTE 或 CHAR 并且只声明用户名 varchar2(500) 那么将分配 500 BYTES 或 500人物?
thanks,
谢谢,
回答by Justin Cave
The default will be whatever your NLS_LENGTH_SEMANTICS
parameter is set to. By default, that is BYTE
to be consistent with older versions of Oracle where there was no option to use character length semantics. If you are defining your own schema and you are using a variable width character set (like AL32UTF8), I'd strongly recommend setting NLS_LENGTH_SEMANTICS
to CHAR because you almost always intended to specify lengths in characters not in bytes.
默认值将是您NLS_LENGTH_SEMANTICS
设置的任何参数。默认情况下,这BYTE
与旧版本的 Oracle 一致,其中没有使用字符长度语义的选项。如果您正在定义自己的架构并且您使用的是可变宽度字符集(如 AL32UTF8),我强烈建议设置NLS_LENGTH_SEMANTICS
为 CHAR,因为您几乎总是打算以字符而不是字节来指定长度。
回答by Denis Kulagin
You might check your current value using the following query:
您可以使用以下查询检查当前值:
SELECT
value
FROM
NLS_DATABASE_PARAMETERS
WHERE
parameter='NLS_LENGTH_SEMANTICS';