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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 12:11:09  来源:igfitidea点击:

varchar2(n BYTE|CHAR) default -> CHAR or BYTE

sqloracle

提问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_SEMANTICSparameter is set to. By default, that is BYTEto 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_SEMANTICSto 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';