日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

数据库的 2个参数 NLS_LENGTH_SEMANTICS 说明,comment 说明

發布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 数据库的 2个参数 NLS_LENGTH_SEMANTICS 说明,comment 说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

###############

sample 1:NLS_LENGTH_SEMANTICS

1、數據庫字符集選擇的是NLS_CHARACTERSET=UTF8,如果NLS_CHARACTERSET=ZHS16GBK就不會有這種情況;

2、原庫中NLS_LENGTH_SEMANTICS=CHAR,新庫中NLS_LENGTH_SEMANTICS=BYTE;

3、主要是第2條造成的,如果字符集是UTF8,字段類型VARCHAR2中一個字符占幾個字節是由NLS_LENGTH_SEMANTICS參數決定的,
如果是BYTE,則一個字符占一個字節,如果是CHAR,則一個字符占四個字節。
通過下面的語句可以查看實際的data_length長度
select table_name, column_name, data_type, data_length from cols

https://www.2cto.com/database/201502/376311.html

上面郵件,出于對隱私的保護,對發件人,收件人,數據庫名稱進行了隱涂。

郵件內容主要意思是:

(1) 源端和目標端數據庫的字符集均為SIMPLIFIED CHINESE_CHINA.UTF8,但是源端數據庫NLS_LENGTH_SEMANTICS參數的值為char,目標數據庫NLS_LENGTH_SEMANTICS參數的值為byte

(2)郵件中對知識錯誤的理解:由于源端數據庫NLS_LENGTH_SEMANTICS參數的值為char(把1個漢字當成一個字節),目標數據庫NLS_LENGTH_SEMANTICS參數的值為byte(把1個漢字占3個字節),所以,源端Varchar2(16)能存儲16個漢字,而目標端Varchar2(16)即只能存5個漢字,導致源數據的數據無法插入到目標端數據庫中去

(3)郵件中錯誤的建議解決辦法:將目標端數據庫的NLS_LENGTH_SEMANTICS參數的值,改成與源端數據庫NLS_LENGTH_SEMANTICS參數相同的值

2、知識的梳理

2.1 NLS_LENGTH_SEMANTICS參數的用途

NLS_LENGTH_SEMANTICS參數是一個專為創建CHAR和VARCHAR2兩種字符型的列時,指定使用的字節長度,還是使用字符長度的定義方式,有byte和char兩種值,默認為byte。

當設置該參數為BYTE時,定義CHAR列或VARCHAR2列采用字節長度方式;當設置該參數為CHAR時,定義CHAR列或VARCHAR2列采用字符長度的方式。該參數對于數據庫中已經存在的列不具備任何用途,只是在創建表,或修改表的列時才具有意義。

2.2 字節長度與字符長度的區別

此章節從百度文庫摘抄,原文地址為:https://baike.baidu.com/link?url=gtnaOI4rLZejxtdNISG3z8Vm1IpobqAB4nv3TRSnKh9RwTo2eR8eRkUWUUv00J7INVvGPQ2O51o-r77SfyIwT_

(1)ASCII碼:

一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。如一個ASCII碼就是一個字節。

(2)UTF-8編碼:

一個英文字符等于一個字節,一個中文(含繁體)等于三個字節。

(3) Unicode編碼:

一個英文等于兩個字節,一個中文(含繁體)等于兩個字節。

(4) 符號:

一個英文標點占一個字節,一個中文標點占兩個字節。舉例:英文句號“.”占1個字節的大小,中文句號“。”占2個字節的大小。

3、郵件中對知識錯誤的理解

郵件中要求修改目標端數據庫NLS_LENGTH_SEMANTICS參數,是完全錯誤的解決方案,之所以出現這樣的情況,是因為此開發人員對NLS_LENGTH_SEMANTICS參數的理解不正確。

該開發人員,錯誤的將NLS_LENGTH_SEMANTICS參數理解成,只要該參數一改,數據庫中所有的涉及CHAR和VARCHAR2兩種字符型的列的長度類型都發生變化了。

其實不是,NLS_LENGTH_SEMANTICS參數的值,不對已經存在的列產生任何影響,只是在創建表中的列時,默認的指定列長度類型為byte還是char,如果在創建或修改表的列時指定了長度類型,完全覆蓋NLS_LENGTH_SEMANTICS參數的值。

4、剖析問題的真正原因

其實,該開發人員所面對的真正問題原因,是源端表字段的長度類型與目標端表字段長度的類型不一致所致。

問題根本原因搞清楚了,解決方案就容易了,將目標端表的字段長度類型修改成與源端一樣,不就解決了木。何必修改數據庫參數還重啟數據庫的。

下面以三條create table的語句說清楚NLS_LENGTH_SEMANTICS參數的用途

(1)兩條指定長度類型的SQL語句

create table tab_t(t_name varchar2(20byte));

create table tab_t(t_name varchar2(20char));

上面兩條語句,唯一的不同,就是在指定列長度為20后,再指定長度的類型,類型的值不同。

(2)不指定長度類型的SQL語句

create table tab_t(t_name varchar2(20));

這條語句,在指定列的長度為20后,并未指定長度的類型,那它的類型會是什么呢,這個就是由NLS_LENGTH_SEMANTICS參數的值所決定了,該參數值可以在會話級設定。

5、測試驗證

5.1 確認數據庫的字符集類型

SQL> select *from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';

PARAMETER VALUE

------------------------------ --------------------------------------

NLS_CHARACTERSET AL32UTF8

5.2 創建列長度類型為byte的表并測試可插入數據長度

(1)查看NLS_LENGTH_SEMANTICS參數當前值

SQL> selectname,value from v$parameter where upper(name)='NLS_LENGTH_SEMANTICS';

NAME VALUE

------------------------------ -------------------------------

nls_length_semantics BYTE

(2)創建帶列長度類型為byte的表

SQL>create table tab_t(t_name varchar2(3));

(3)查看新創建的tab_t表的t_name列長度類型

SQL>select table_name,column_name,data_type,char_usedfrom dba_tab_columns where table_name='TAB_T'

TABLE_NAME COLUMN_NAME DATA_TYPE CHAR_USED

-------------------- ----------------------- ------------------------- -----------------------------

TAB_T T_NAME VARCHAR2 B

(4)插入英文字符串數據測試

$ export NLS_LANG=AMERICAN_AMERICA.UTF8

--注意上面這一條,設置客戶端字符集很重要,如果環境變量有設置,此步可以跳過。如果發生復雜的字符集轉換,一個中文漢字有可能會占用6個字節

SQL> insert into tab_t values ('ZHO');

1 row created.



SQL> insert into tab_t values ('ZHON');

insert into tab_t values ('ZHON')

*

ERROR at line 1:

ORA-12899: value too large for column "SYS"."TAB_T"."T_NAME" (actual: 4,maximum: 3)

從上面測試數據來看,插入三個英文字母成功,在插入四個字母的字符串時失敗,提示實際長度為4,但maximum只有3

(5) 插入中文字符串數據測試

1)先計劃一下“中”字占用幾個字節

SQL> SELECT LENGTHB('中') FROM DUAL;

LENGTHB('中')

-------------

3

2)插入一個中文漢字

SQL> insert into tab_t values ('中');

1 row created.

3)插入兩個中文漢字

SQL> insert into tab_t values ('中國');

insert into tab_t values ('中國')

*

ERROR at line 1:

ORA-12899: value too large for column "SYS"."TAB_T"."T_NAME" (actual: 6, maximum: 3)

插入兩個中文漢字失敗,實際長度為6,字段maximum只有3,在此驗證確定,在UTF8下,一個中文漢字占3個字符。

5.3 將tab_t表的t_name列更改成char長度類型并做可插入長度測試

(1)將tab_t表的t_name列長度類型更改成char

SQL>alter table tab_t modify (t_name varchar2(3char));

(2)驗證修改結果

SQL> selecttable_name,column_name,data_type,char_used from dba_tab_columns wheretable_name='TAB_T' ;

TABLE_NAME COLUMN_NAME DATA_TYPE CHAR_USED

-------------------- ----------------------- ------------------------- -----------------------------

TAB_T T_NAME VARCHAR2 C

(3) 插入兩個中文漢字

SQL> insert into tab_t values ('中國');



1 row created.

varchar2(3 char)插入兩個中文漢字成功

6、小結

經過對開發人員的需求進行判斷,以及糾正其對NLS_LENGTH_SEMANTICS參數用途錯誤的理解,用修改表字段長度類型的方式解決其面臨的實際問題,避免了一次不必要的數據庫重啟,以及問題得到真正的解決。

#########2

oracle導出、導入表和字段的注釋

--導出表的注釋

set heading off;
set echo off;
set feedback off;
set termout on;
spool C: able_comment.sql;
SELECT 'comment on table ' || t.table_name || ' is ''' || t.comments ||''';' FROM user_tab_comments t;
spool off;

--導入表的注釋
@ C: able_comment.sql;

--導出表字段的注釋
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:column_comment.sql;
SELECT 'comment on column ' || t.table_name || '.' || t.column_name || ' is ''' || t.comments ||''';' FROM user_col_comments t;
spool off;

--導入表字段的注釋
@ C:column_comment.sql;

https://blog.csdn.net/shipeng1022/article/details/53066558

oracle 數據導入 數據和備注(comment)亂碼問題解決辦法

總結

以上是生活随笔為你收集整理的数据库的 2个参数 NLS_LENGTH_SEMANTICS 说明,comment 说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一级一级 | 亚洲成人免费视频 | 91精品国产综合久久久蜜臀图片 | 泰剧19禁啪啪无遮挡 | 黄色精品一区 | 三级av | 午夜免费网址 | av网站网址 | 熟女一区二区三区四区 | 亚洲综合五月天 | 日本在线观看www | 精品人妻久久久久一区二区三区 | 国产在线网站 | 在线免费观看亚洲视频 | 久久av资源 | 亚洲精品日韩在线观看 | 欧美xx孕妇| 激情午夜网 | 亚洲va久久久噜噜噜无码久久 | 国产免费无遮挡吸奶头视频 | 国产精品一区二区在线观看 | 亚洲午夜精品久久久久久app | 中文字幕xxx | 视频一区二区在线 | 国产在线一区二区视频 | 17c精品麻豆一区二区免费 | 亚洲欧美在线观看视频 | 丰满人妻翻云覆雨呻吟视频 | 在线免费观看h片 | jizz性欧美15| 亚洲欧美激情小说另类 | 丰满人妻一区二区三区性色 | 99精品成人 | 91丨porny丨在线| 好吊色一区二区 | 日本少妇激情视频 | 玖草在线观看 | 黄色网址最新 | 欧美精品一区二区蜜臀亚洲 | 理论片高清免费理伦片 | 日韩中文欧美 | 蜜桃成熟时李丽珍国语 | 精品视频一区二区三区四区 | 欧美激情第二页 | 日韩av网站在线观看 | www.蜜桃av | 狂野欧美性猛交blacked | a级片毛片 | 日韩一级黄 | 欧美性色黄 | jlzzjlzz国产精品久久 | 一级在线免费观看 | 亚洲精品视频网址 | 377人体粉嫩噜噜噜 www.av黄色 | 青青视频免费观看 | 亚洲免费福利视频 | 国产精品69久久久久孕妇欧美 | 久久久网站 | 成人精品视频一区 | 久久免费国产视频 | 中国农村一级片 | 国产一区二区片 | 日韩在线一 | 国产免费观看视频 | 久久国产精品精品国产色婷婷 | 婷婷综合社区 | 免费一级特黄特色毛片久久看 | 爱啪啪导航 | 老师张开让我了一夜av | 国产午夜一区二区 | 欧美一区二区最爽乱淫视频免费看 | 亚洲精品一线 | 久久女同 | 欧美精品一卡二卡 | 亚洲一区精品视频在线观看 | 亚洲熟妇av一区二区三区漫画 | 亚洲一区二区自偷自拍 | 污视频网址 | aaa色| 亚欧美色图| www.com毛片| 影音先锋在线观看视频 | 国产婷婷色综合av蜜臀av | 色伊人| 久久国产免费视频 | 波多野结衣在线影院 | 国产二区自拍 | 亚洲精品少妇 | 色婷婷色婷婷 | 日韩久久免费 | 成人小视频在线免费观看 | 超碰碰碰碰 | 献给魔王伊伏洛基亚吧动漫在线观看 | china国产乱xxxxx绿帽 | 丰满人妻一区二区三区免费视频棣 | 色中色综合网 | 成人av动漫在线 | 午夜天堂| 久久视频在线免费观看 |