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.pswp.cn/web/71683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71683.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系列:如何用heaptrack跟蹤.NET程序的非托管內存泄露

一:背景 1. 講故事 前面跟大家分享過一篇 C# 調用 C代碼引發非托管內存泄露 的文章,這是一個故意引發的正向泄露,這一篇我們從逆向的角度去洞察引發泄露的禍根代碼,這東西如果在 windows 上還是很好處理的,很多人知道開…

vite.config.js 是Vite 項目的配置文件,分析具體用法

vite.config.js 是 Vite 項目的配置文件,用于定義項目的構建、開發服務器、插件等配置選項。以下是示例代碼中各部分的作用分析: 1. 導入模塊 import { fileURLToPath, URL } from node:url import { defineConfig } from vite import vue from vitejs…

行為模式---責任鏈模式

概念 責任鏈模式是一種行為設置模式,它的核心思想就是將請求的發送者和接收者進行解耦,每個接收者都可以處理請求。 在責任鏈模式中將每個接收者連成一個鏈條,當有請求發送上來的時候會經過每一個接收者。直到消息被處理。 適用場景 1、當…

pytest結合allure

Allure 一、文檔二、指令三、裝飾器3.1 allure.step裝飾器3.2 allure.description裝飾器3.3 allure.title裝飾器3.4 allure.link、allure.issue 和 allure.testcase裝飾器3.5 allure.epic、allure.feature 和 allure.story裝飾器3.6 allure.severity裝飾器 一、文檔 allure文檔…

前端知識點---http.createHttp()的理解(arkts)

通俗易懂的例子:點外賣 🍔🥤 想象一下,你在家里點外賣,HTTP 請求就像是你和餐廳之間的溝通方式。 1?? 沒有 http.createHttp():每次點餐都重新撥電話 📞 如果你每次點餐都重新撥打餐廳的電話…

大模型開發(五):P-Tuning項目——新零售決策評價系統(下)

P-Tuning項目——新零售決策評價系統(下) 0 前言1 P-Tuning原理2 數據處理 0 前言 上篇文章我們介紹了使用PET方式微調BERT模型,PET屬于提示詞微調的一種,另一種比較常見的提示詞微調是P-Tuning,我們今天在相同的項目…

分布式中間件:Redis介紹

目錄 Redis 概述 Redis 的特點 高性能 豐富的數據結構 持久化 分布式特性 簡單易用 Redis 的數據結構 字符串(String) 哈希(Hash) 列表(List) 集合(Set) 有序集合&…

在昇騰GPU上部署DeepSeek大模型與OpenWebUI:從零到生產的完整指南

引言 隨著國產AI芯片的快速發展,昇騰(Ascend)系列GPU憑借其高性能和兼容性,逐漸成為大模型部署的重要選擇。本文將以昇騰300i為例,手把手教你如何部署DeepSeek大模型,并搭配OpenWebUI構建交互式界面。無論…

系統思考—組織診斷

“未經過診斷的行動是盲目的。” — 托馬斯愛迪生 最近和一家教育培訓機構溝通時,發現他們面臨一個有意思的問題:每年招生都挺不錯,但教師的整體績效一直提升緩慢,導致師生之間存在長期的不匹配。管理層試了很多辦法,…

AI大模型學習(五): LangChain(四)

Langchian讀取數據庫 案例:在數據庫中表格數據上的問題系統的基本方法,將涵蓋使用鏈和代理的視線,通過查詢數據庫中的數據并得到自然語言的答案,兩者之間的主要區別在于,我們代理可以根據多次循環查詢數據庫以回答問題 實現思路: 1.將問題轉換成DSL查詢,模型將用…

人工智能與深度學習的應用案例:從技術原理到實踐創新

第一章 引言 人工智能(AI)作為21世紀最具變革性的技術之一,正通過深度學習(Deep Learning)等核心技術推動各行業的智能化進程。從計算機視覺到自然語言處理,從醫療診斷到工業制造,深度學習通過模擬人腦神經網絡的層次化學習機制,實現了對復雜數據的高效分析與決策。本…

支持向量機的深度解析:從理論到C++實現

支持向量機(SVM)是一種強大的監督學習算法,廣泛應用于分類和回歸任務。本文詳細探討了SVM的理論基礎,包括最大間隔分離超平面、軟間隔和核技巧(Kernel Trick)的數學原理,并通過LaTeX公式推導其優化目標。接著,我們用C++實現了一個簡單的線性SVM,包括梯度下降優化求解支…

企業如何選擇研發項目進度管理軟件?盤點15款實用工具

這篇文章介紹了以下工具: 1. PingCode; 2. Worktile; 3. 騰訊 TAPD; 4. 華為 DevCloud; 5. 億方云; 6. 阿里云效; 7. CODING 碼云; 8. 明道云; 9. 進度貓; 10. 輕流等。 …

c++: 容器vector

文章目錄 介紹initializer_list與string的不同底層總代碼 介紹 C 中的 vector 是一種序列容器,它允許你在運行時動態地插入和刪除元素。 vector 是基于數組的數據結構,但它可以自動管理內存,這意味著你不需要手動分配和釋放內存。 與 C 數組相…

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一個表格控件,行和列交匯形成的每個單元格,是一個 QTableWidgetItem 對象。 1. QTableWidget屬性 QTableWidget 的屬性只有兩個: 屬性說明rowCount當前行的個數。columnCount當前列的個數。 2. QTableW…

Golang學習筆記_47——訪問者模式

Golang學習筆記_44——命令模式 Golang學習筆記_45——備忘錄模式 Golang學習筆記_46——狀態模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 編譯器實現2. 財務系統3. UI組件系統 四、Go語言實現示例完整實現代碼執行結果 五、…

棧概念和結構

文章目錄 1. 棧的概念2. 棧的分類3. 棧的實現(數組棧)3.1 接口設計(Stack.h)3.2 接口實現(Stack.c)1)初始化銷毀2)棧頂插入刪除3)棧頂元素、空棧、大小 3.3 完整代碼Stac…

GitCode 助力 vue3-element-admin:開啟中后臺管理前端開發新征程

源碼倉庫: https://gitcode.com/youlai/vue3-element-admin 后端倉庫: https://gitcode.com/youlai/youlai-boot 開源助力,開啟中后臺快速開發之旅 vue3-element-admin 是一款精心打造的免費開源中后臺管理前端模板,它緊密貼合…

算法.習題篇

算法 — 地大復試 模擬 while循環和MOD循環計數 1.約瑟夫問題 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判斷當前數組是否一個小孩都沒有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…

大白話JavaScript實現一個函數,將字符串中的每個單詞首字母大寫。

大白話JavaScript實現一個函數&#xff0c;將字符串中的每個單詞首字母大寫。 答題思路 理解需求&#xff1a;要寫一個函數&#xff0c;它能接收一個字符串&#xff0c;然后把這個字符串里每個單詞的第一個字母變成大寫。分解步驟 拆分單詞&#xff1a;一般單詞之間是用空格隔…