導航:首頁 > 數據處理 > 資料庫定長是什麼意思

資料庫定長是什麼意思

發布時間:2022-12-27 02:58:35

1. 資料庫設計如何確定欄位的長度

1、因為很久以前資料庫只支持CHAR類型,有些應用的業務邏輯也只是針對CHAR類型設計的,所以資料庫軟體也就一直保留CHAR類型。
2、CHAR類型是定長的,一些資料庫可以在每條記錄中不存儲欄位長度信息,這樣可以節省部份空間,也可以方便做一些內存對齊提高性能。
3、還有說法是有些數據經常修改,長度可能變化,會引起碎片,採用CHAR就不會產生碎片,這個說法比較多。

2. 資料庫中char和nchar的區別,分別什麼時候用,什麼意思,求解釋。

對於程序中的string型欄位,SQLServer中有char、varchar、nchar、nvarchar四種類型來對應(暫時不考慮text和ntext),開建立資料庫中,對這四種類型往往比較模糊,這里做一下對比。
1.有var前綴的,表示是實際存儲空間是變長的,varchar,nvarchar
所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;而變長字元數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
2.n表示Unicode字元,即所有字元都占兩個位元組,nchar,nvarchar
字元中,英文字元只需要一個位元組存儲就足夠了,但漢字眾多,需要兩個位元組存儲,英文與漢字同時存在時容易造成混亂,Unicode字元集就是為了解決字元集這種不兼容的問題而產生的,它所有的字元都用兩個位元組表示,即英文字元也是用兩個位元組表示。
3.基於以上兩點來看看欄位容量
char,varchar
最多8000個英文,4000個漢字
nchar,nvarchar
可存儲4000個字元,無論英文還是漢字
4.使用(個人偏好)
a.如果數據量非常大,又能100%確定長度且保存只是ansi字元,那麼char
b.能確定長度又不一定是ansi字元或者,那麼用nchar;
c.對於超大數據,如文章內容,使用nText
d.其他的通用nvarchar

3. 定點和定長是什麼

平面上到定點的距離等於定長的所有點組成的圖形叫做圓。定點稱為圓心,定長稱為半徑。

幾何圖形的半徑通常是其中包含的最大圓或球的半徑。 環,管或其他中空物體的內半徑是其空腔的半徑。

對於常規多邊形,半徑與其周長相同。正多邊形的內半徑也稱為心距。在圖論中,圖的半徑是從u到圖的任何其他頂點的最大距離的所有頂點u的最小值。

簡介:

在古典幾何中,圓或圓的半徑是從其中心到其周邊的任何線段,並且在更現代的使用中,它也是其中任何一個的長度。 這個名字來自拉丁半徑,意思是射線,也是一個戰車的輪輻。

半徑的復數可以是半徑(拉丁文復數)或常規英文復數半徑。半徑的典型縮寫和數學變數名稱為r。 通過延伸,直徑d定義為半徑的兩倍:d=2r。

4. 請問什麼是幾何里的定長

定長是指已經確定了的長度.至於確定的長度是多少那是與具體情況有關的.
一般所說的定長指任意長度,但是該長度一旦在開始時用過一次,那麼後面的該定長就應該等於前面的該定長,就像方程中的x一樣,x是未知的,但是每個x是相等的.

5. 資料庫中char和varchar的區別

char 是定長

varchar 是可變的

比如兩個定義的長度都是5,char類型的欄位輸入的長度必須是5,varchar類型的欄位輸入的長度可以小於等於5

6. 資料庫中 定長字元串 對 變長字元按串有什麼優點為什麼有時候還要用定長字元串。

資料庫對定長的欄位操作有優化,
數據量大時做特定操作的時候,比變長的會快很多

7. 資料庫中的數據類型

char是定長,設置長度是多少就會存儲多少,不足用空格補位
varchar是變長,只存儲輸入的大小長度,不補位

8. 資料庫欄位類型中的字元串類型一定要聲明長度嗎

您好,
現代資料庫一般都支持CHAR與VARCHAR字元型欄位類型,CHAR是用來保存定長字元,存儲空間的大小為欄位定義的長度,與實際字元長度無關,當輸入的字元小於定義長度時最後會補上空格。VARCHAR是用來保留變長字元,在資料庫中存儲空間的大小是實際的字元長度,不會像CHAR一樣補上空格,這樣佔用的空間更少。

從以上特點來看,VARCHAR比CHAR有明顯的優勢,因此大部份資料庫設計時都應該採用VARCHAR類型。那為什麼還需要CHAR類型呢,個人認為有以下幾個原因:
1、為了跟以前版本的資料庫進行一個兼容,因為很久以前資料庫只支持CHAR類型,有些應用的業務邏輯也只是針對CHAR類型設計的,所以資料庫軟體也就一直保留CHAR類型。
2、CHAR類型是定長的,一些資料庫可以在每條記錄中不存儲欄位長度信息,這樣可以節省部份空間,也可以方便做一些內存對齊提高性能,但個人認為這帶來的性能提升非常微小,至少ORACLE資料庫是沒有意義的。
3、還有說法是有些數據經常修改,長度可能變化,會引起碎片,採用CHAR就不會產生碎片,這個說法比較多,但我認為既然長度會變化,那用VARCHAR更能節省內存與存儲空間來提升性能,只要數據塊預留的空間沒有問題,採用VARCHAR性能更好。

對於ORACLE資料庫,我找不到充足的理由來使用CHAR類型,而且CHAR還會帶來討厭的空格,有些文章說MYSQL的MYISAM存儲引擎在和長度固定的情況下CHAR比VARCHAR好,這個沒有測試過,不太了解。

由於VARCHAR是變長存儲,那麼很多人會有疑問,比如STATUS欄位定義VARCHAR(10)與VARCHAR(1000)有什麼區別,反正是變長的,存儲空間都一樣,省得以後要加長又要改變欄位定義。 下面說一下我的理解:
1、欄位長度是資料庫一種約束,可以保證進入資料庫的數據符合長度要求,定義合理的欄位長度可以減少一部份非法數據進入,比如:我們業務中STATUS只有『NEW』,『DELETE』,『CLOSE』3種狀態,使用VARCHAR(5)保存,這樣可以有效的減少非法數據進入,定義合理的長度也可以讓人容易理解欄位的用途,試想一下,如果你所有的字元欄位長度都是VARCHAR(4000)會是什麼樣的情況。

2、VARCHAR的欄位長度雖然對數據存儲沒有太大影響,但對特定的資料庫還是有一些細微差別,比如MYSQL中定義的長度如果小於255,欄位長度用1個位元組表示,如果超過255,欄位的長度將固定用2個位元組表示。如果你的業務數據最大長度只有10,但定義長度為256則每條記錄會多浪費了一個位元組來存儲長度。ORACLE沒有這樣的問題,它會根據每條記錄欄位的實際長度動態選擇長度標識。

3、欄位定義的長度對索引也有較大影響。ORACLE對索引長度還是有一定限制,8i官方文檔說明單條記錄索引信息的長度不能超過數據塊大小的40%,9i中是75%,實際上也差不多,具體可以見jametong的http://www.dbthink.com/?p=20這篇文檔,裡面有詳細的測試結果。如果你的數據塊大小是8K,那麼索引欄位的定義長度不能超過6398,比如,你要給表上2個VARCHAR(4000)欄位建組合索引,創建時會直接報錯。另外索引組織表及在線重建索引(因為中間會臨時創建一個索引組織表)允許的索引信息長度更小,只能是數據塊大小的40%,實際中8K的數據塊大小,要使用在線重建索引,那定義的長度不能超過3215。從以上可以看出,數據塊大小為8K時,設計欄位時如果要定義為VARCHAR(4000),那這個欄位就不能考慮建立索引,因為即使能建上,也不能做在線重定義操作,DBA要進行索引維護時只能停止應用,這將對系統的可用性產生較大影響。關於ORACLE索引長度限制測試的腳本如下:
關於ORACLE的索引長度還有一些特別的規則,比如自定義函數返回的字元定義長度固定是4000,所以要用自定義函數做函數索引需要特別注意一下,這可能會影響在線重建索引不能操作。
內置函數的索引長度根據函數決定,比如UPPER這種不改變長度的就是索引欄位定義的長度,SUBSTR這種會改變長度要根據函數截取長度決定。
NUMBER類型欄位的長度固定是22。
DATA類型欄位的長度固定是7。
索引默認是升序,如果要降序建的索引長度是欄位定義長度*1.5+1。
MYSQL對索引長度限制比較復雜,每種版本及存儲引擎都不一樣,如下是MYSQL5.1.58測試的結果:
INNODB的最大總長度是3072位元組,單個字元欄位是767位元組,如果欄位長度大於767則自動截取前767個字元。
MYISAM最大總長度是1000位元組,單個字元欄位是1000位元組。
MEMORY的最大總長度是3072位元組,單個字元欄位是3072位元組。

4、變長欄位定義的長度雖然不會影響伺服器數據空間大小,但是對於客戶端的內存有影響,因為客戶端在用SQL從資料庫讀取數據時,首先會取到欄位定義的長度,然後分配足夠的內存,也就是說如果你定義的欄位長度是1K,實際長度是10位元組,要取1K記錄,那客戶端會分配1MB的內存, 但只保存了10K有效數據。這將會比較嚴重的浪費客戶端內存。特別是一些高並發或者是取大量數據的場景,容易產生內存溢出。

5、關於欄位長度對齊的問題,有些設計人員喜歡定義欄位的長度為4或者8的倍數,如16,32,64,128之類的,理由是可以做到內存對齊,對於這個問題我沒有深入分析過,個人認為必要性不大,也沒看到過這種優化能提升性能的案例。如果一個VARCHAR(1)定義為VARCHAR(4)反而浪費內存與存儲,實際上我看到在ORACLE jdbc驅動中會將所有的字元類型數據保存在一個大的char[]中,把所有NUMBER與DATE類型放在另一個char[]中,這樣整合後都不清楚如何內存對齊了。

綜上所述:VARCHAR類型欄位長度不能隨便定義,並不是越大越好,還是需要根據實際業務數據定義一個合適的長度。我個人對於一些可以完全預估的長度就按實際長度定義,比如年月、狀態、標記之類的信息。對於不確定長度的業務數據如NAME、STYLE之類的信息定義一個合理值,如VARCHAR(20),VARCHAR(30) 之類 。對於描述性或備注性的信息,這些欄位也確定不會有索引,長度也不可預知,所以留更大的長度,避免以後經常進行長度調整,如VARCHAR(1024),或者直接VARCHAR2(4000) 。

9. SQL Server中定長char(n)和變長varchar(n)有什麼區別,誰能告訴我啊

VARCHAR 對每個英文(ASCII)字元都佔用2個位元組,對一個漢字也只佔用兩個位元組
CHAR 對英文(ASCII)字元佔用1個位元組,對一個漢字佔用2個位元組
VARCHAR 的類型不以空格填滿,比如VARCHAR(100),但它的值只是"QIAN",則它的值就是"QIAN"
而CHAR 不一樣,比如CHAR(100),它的值是"QIAN",而實際上它在資料庫中是"QIAN "(QIAN後共有96個空格,
就是把它填滿為100個位元組)。

由於CHAR是以固定長度的,所以它的速度會比VARCHAR快得多!但程序處理起來要麻煩一點,要用TRIM之類的函數把兩邊的空格去掉!

[上面的理論是從網上來的]

至於用法如下:
在一些長度變化不是很大的欄位應該用char類型,而對長度變化很大的欄位應該用varchar類型了。

閱讀全文

與資料庫定長是什麼意思相關的資料

熱點內容
信息量是怎麼算 瀏覽:778
大數據什麼是績效考核 瀏覽:622
旅遊優惠信息哪裡看 瀏覽:600
高速倒車多久會收到信息 瀏覽:401
杭州聯通信息中心電話是多少 瀏覽:356
電力系統單機信息上傳是怎麼工作 瀏覽:68
東鳳最大的市場是哪個 瀏覽:97
杭州地鐵技術管理人員待遇怎麼樣 瀏覽:176
工廠合資技術分多少 瀏覽:986
羅馬交易所的幣是哪裡來的 瀏覽:343
為什麼交易貓發貨了沒反應 瀏覽:768
哪些渠道可以獲取到新店信息 瀏覽:280
系統技術升級中請稍後登錄什麼意思 瀏覽:334
產權轉讓怎麼交易 瀏覽:754
如何看懂產品的分析 瀏覽:958
如何把手薄數據做成表格 瀏覽:934
數據分析設計需要什麼軟體 瀏覽:80
小程序中wps編輯完成後如何保存 瀏覽:729
如何地推賣產品 瀏覽:228
證券交易所為什麼是會員制 瀏覽:788