将 varchar2 的 oracle 标准数据类型从 BYTE 设置为 CHAR
Set oracle standard data type for varchar2 from BYTE to CHAR
数据类型varchar2 可以存储为BYTE 或CHAR。如果在 DDL 中没有定义为 which,它会自动创建为 BYTE。这可能会导致问题,因为某些字符大于一个字节。所以基本上 1 个字节并不总是等于 1 个字符。我找不到在哪里将 varchar2 数据类型的默认设置更改为 CHAR 而不是 BYTE。
所以基本上我想将 DDL 定义为
CREATE TABLE TBL1 (COLUMN1 VARCHAR2(100))
并使用 column1 获取 TBL1 作为 varchar2(100 CHAR) 而不是 varchar2(100 BYTE)
您可以使用以下方式更改默认值:
alter system set NLS_LENGTH_SEMANTICS=CHAR
如果您想在会话级别更改它,您可以使用:
alter session set NLS_LENGTH_SEMANTICS=CHAR
来自 oracle-base。
为会话而不是实例设置参数可能是最安全的。根据 Database Reference entry for NLS_LENGTH_SEMANTICS:
Oracle strongly recommends that you do NOT set the
NLS_LENGTH_SEMANTICS parameter to CHAR in the instance or server
parameter file. This may cause many existing installation scripts to
unexpectedly create columns with character length semantics, resulting
in run-time errors, including buffer overflows.
数据类型varchar2 可以存储为BYTE 或CHAR。如果在 DDL 中没有定义为 which,它会自动创建为 BYTE。这可能会导致问题,因为某些字符大于一个字节。所以基本上 1 个字节并不总是等于 1 个字符。我找不到在哪里将 varchar2 数据类型的默认设置更改为 CHAR 而不是 BYTE。
所以基本上我想将 DDL 定义为
CREATE TABLE TBL1 (COLUMN1 VARCHAR2(100))
并使用 column1 获取 TBL1 作为 varchar2(100 CHAR) 而不是 varchar2(100 BYTE)
您可以使用以下方式更改默认值:
alter system set NLS_LENGTH_SEMANTICS=CHAR
如果您想在会话级别更改它,您可以使用:
alter session set NLS_LENGTH_SEMANTICS=CHAR
来自 oracle-base。
为会话而不是实例设置参数可能是最安全的。根据 Database Reference entry for NLS_LENGTH_SEMANTICS:
Oracle strongly recommends that you do NOT set the NLS_LENGTH_SEMANTICS parameter to CHAR in the instance or server parameter file. This may cause many existing installation scripts to unexpectedly create columns with character length semantics, resulting in run-time errors, including buffer overflows.