当前位置: 首页 > article >正文

Oracle 字符类型对比

本文以 Oracle12c 为例

1.主要区别对比

类型存储方式最大长度字符集支持适用场景备注
CHAR(M)固定长度+空格填充2000 字节,M 代表字节长度默认字符集固定长度编码实际存储长度固定为定义长度(如 CHAR(10) 始终占 10 字节)
VARCHAR2(M)可变长度4000 字节,M 默认代表字节长度默认字符集可变长度文本标准模式下最大为 4000 字节,扩展模式可到 32767 字节(需手动启用)
NCHAR(M)固定长度+空格填充2000 字符,M 代表字符长度国家字符集多语言固定长度文本M 支持的长度受字符集影响
NVARCHAR2(M)可变长度4000 字节,M 代表字符长度国家字符集多语言可变长度文本M 支持的长度受字符集影响
CLOB大文本4GB数默认字符集超大单字节文本(如日志、XML)实际存储受表空间和数据块限制
NCLOB大文本4GB国家字符集超大多语言文本实际存储受表空间和数据块限制

VARCHAR 类型在 Oracle 中支持有限,不建议使用。

类型前缀为 “N” 代表使用的是国家字符集,且字符存储时采用 Unicode,且在多语言情况下相同字符所需的存储空间可能更小。

类型前缀不带 “N” 代表采用数据库默认的字符集,可能会导致字符存储时不采用 Unicode 编码方式。但一般数据库默认的字符集都是 UTF8 类型的。因此一般用不带 “N” 的类型就可以了。

前缀带 “N” 的类型长度 M 代表的都是字符长度,不带 “N” 的类型长度 M 默认都是指字节长度

查看当前数据库默认字符集和国家字符集的方式如下:

-- 查看数据库字符集(默认字符集)、国家字符集
SELECT *
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

输出为:
在这里插入图片描述
可以看到此时默认字符集为 AL32UTF8,国家字符集为 AL16UTF16。

​数据库默认字符集:

  • AL32UTF8:Unicode UTF-8(Unicode 5.0+(新标准))。
  • ZHS16GBK:简体中文 GBK 编码。
  • WE8MSWIN1252:西欧字符集。

​国家字符集:

  • AL16UTF16:Unicode UTF-16。
  • UTF8:Unicode UTF-8(Unicode 3.1(旧标准))。

2.补充

上文提到,字符类型长度 M 能指定的最大值与数据集相关。比如在多字节字符集(如 AL16UTF16),建表时用 NVARCHAR2(4000) 会报错,可能原因是超过了最大字节长度 4000。

此外,M 能指定的最大长度还与“数据库块大小(默认 8KB)”、“数据库是否开启扩展模式” 等因素有关。

-- 查看块大小
SELECT value AS "块大小 (字节)"
FROM v$parameter
WHERE name = 'db_block_size';

-- 查看扩展模式
SELECT value AS "扩展模式"
FROM v$parameter
WHERE name = 'max_string_size';

http://www.kler.cn/a/579164.html

相关文章:

  • Manus AI Agent 技术解读:架构、机制与竞品对比
  • React 中 Hooks 函数及作用
  • 玛卡巴卡的k8s知识点问答(一)
  • 《打破常规:量子比特如何同时“是0又是1”》
  • 基于Spring Boot的多级缓存架构实现
  • 【vscode编辑器配置】
  • Linux中的TCP编程接口基本使用
  • PE文件结构详解(DOS头/NT头/节表/导入表)使用010 Editor手动解析notepad++.exe的PE结构
  • 启智畅想集装箱号码识别技术,具备的特点与优势
  • python机试1:读取和输出数据
  • 开发ai模型最佳的系统是Ubuntu还是linux?
  • 深度学习/强化学习调参技巧
  • 如何在rust中解析 windows 的 lnk文件(快捷方式)
  • Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(5)
  • Java直通车系列14【Spring MVC】(深入学习 Controller 编写)
  • 2025-3-9 一周总结
  • XML多子元素、多属性及XSD数据格式验证 Java
  • QTS单元测试框架
  • 大语言模型从理论到实践(第二版)-学习笔记(一)transformer理论与实践
  • 基于C语言的控制台小游戏——打砖块