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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【转】oracle数据库中varchar2陷阱

發(fā)布時間:2023/12/20 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】oracle数据库中varchar2陷阱 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://www.cnblogs.com/iyangyuan/p/3491215.html

?

oracle數(shù)據(jù)庫相信大家都比較熟悉,數(shù)據(jù)庫中有一種非常常用的數(shù)據(jù)類型:字符串型。

???????? 對應(yīng)該類型,在oracle中有三種比較常用的類型:varchar2(byte)、varchar2(char)、nvarchar2()。

???????? 那么這三種類型到底有什么區(qū)別呢?

???????? 首先,我們要時刻記清:無論是varchar2還是nvarchar2,最大字節(jié)數(shù)都是4000。

?????????varchar2(byte):就是默認(rèn)的表示方式,比如我們寫成:varchar2(100),就相當(dāng)于varchar2(100 byte),表示最大字節(jié)數(shù)是100,該字段最多能容納100個字節(jié),強調(diào)空間大小。由于我們描述的是字節(jié),因此,保存漢字等字符時,就要小心了。如果你的數(shù)據(jù)庫用的是GBK編碼,那么一個漢字將占用2個字節(jié),最多能存50個漢字,如果你的數(shù)據(jù)庫用的是UTF8編碼,那么一個漢字將占用3個字節(jié),最多能存33個漢字。

?????????varchar2(char):表示最大字符數(shù)是100,該字段最多能容納100個字符,強調(diào)個數(shù)。假設(shè)我們寫成varchar2(100 char),那么無論是數(shù)字、字母、漢字,都看成一個字符,最多寫100個,當(dāng)然,漢字越多,占用的空間越大,同樣遵循上邊的數(shù)據(jù)庫編碼原則。例如:存入一個漢字,底層占2或3個字節(jié),存入一個字母,占1個字節(jié),絕對不是某些文章所說1個字母或數(shù)字也占2或3個字節(jié)!

?????????nvarchar2():沒有byte、char之分,類似于varchar2(char),只不過nvarchar2()屏蔽了數(shù)據(jù)庫編碼,無論是何種編碼,nvarchar2()中一個漢字都占兩個字節(jié)。

???????? 一般的教程,也就到這了,可是如果再多一步思考,會發(fā)現(xiàn)一個致命問題。

???????? 實際應(yīng)用中,很可能會出現(xiàn)這種寫法:varchar2(1400 char),我們主觀的認(rèn)為,這個字段最長不能超過1400個字符,這意味著我們可能會存入1399個字符,貌似很正確的樣子。

???????? 但是,如果這1399個字符都是漢字,字符長度并沒有超過1400,看起來一切正常,但實際上我們損失了一部分?jǐn)?shù)據(jù),為什么?

?????????因為1399個漢字,按UTF8編碼來說(99%的項目都是UTF8編碼吧。。),需要占用1399*3=4197個字節(jié),而文章開篇就說,無論是什么char,最大長度就是4000字節(jié),一個也不能多,因此多出來的197個字節(jié),都會抹去,而整個過程中,無任何錯誤提示,你的數(shù)據(jù)就這樣蒸發(fā)了!

???????? 所以,對于GBK編碼的數(shù)據(jù)庫而言,安全的寫法為:varchar2(2000 char)、nvarchar2(2000),對于UTF8編碼的數(shù)據(jù)庫而言,安全的寫法為:varchar2(1333 char)、nvarchar2(2000)。

???????? 各位讀者,趕快檢查一下你的數(shù)據(jù)庫吧!

???????? 小菜水平有限,高手勿噴,歡迎與我交流~~~

轉(zhuǎn)載于:https://www.cnblogs.com/bj20170624/p/8492207.html

總結(jié)

以上是生活随笔為你收集整理的【转】oracle数据库中varchar2陷阱的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。