【问题标题】:oracle bytes and unicode characters CHAR vs NCHAR, NCHAR not workingoracle字节和unicode字符CHAR与NCHAR,NCHAR不起作用
【发布时间】:2022-06-10 17:36:03
【问题描述】:
SELECT * 
FROM  nls_database_parameters 
WHERE PARAMETER IN('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

输出:

NLS_NCHAR_CHARACTERSET    AL16UTF16
NLS_CHARACTERSET          AL32UTF8

创建表:

CREATE TABLE char_demo 
(
    a CHAR(1 CHAR),
    b NCHAR(1)
);

INSERT INTO char_demo (a, b) 
VALUES ('a', 'a');          -- Ok

INSERT INTO char_demo (a, b) 
VALUES('????', 'b');          -- Ok

INSERT INTO char_demo (a, b) 
VALUES('????', '????');         -- **Bad**

ORA-12899:“CHAR_DEMO”列的值太大。“B”(实际:2,最大值:1)

为什么? charnchar有什么区别?

【问题讨论】:

    标签: oracle char nchar


    【解决方案1】:

    NCHAR 数据类型用于存储固定长度的 Unicode 字符数据。 NCHAR 列的最大字节长度取决于当前的国家字符集。 NCHAR 的字符集只能是 AL16UTF16 或 UTF8。也就是说,正如您在查询中提到的结果: NLS_NCHAR_CHARACTERSET AL16UTF16 => AL16UTF16 字符集使用 2 个字节来存储一个字符,因此描述列 b NCHAR(1) => 最大字节长度为 2 个字节。因此,当您尝试在此列 'b' => 中插入国家字符集时,您必须更改 NCHAR 的最大大小 => b NCHAR(2)。

    Oracle NCHAR 与 CHAR

    1. NCHAR 的最大大小仅在字符长度语义中,而 CHAR 的最大大小可以在字符或字节长度语义中。

    2. NCHAR 以国家默认字符集存储字符,而 CHAR 以默认字符集存储字符。

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2011-05-01
      • 2019-12-16
      • 1970-01-01
      • 2011-03-27
      • 2013-04-05
      • 2012-03-21
      • 2018-10-12
      相关资源
      最近更新 更多