数据库知识点区别
1:數(shù)據(jù)庫的char、varchar、nchar、nvarchar的區(qū)別
對(duì)于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四種類型來對(duì)應(yīng)(暫時(shí)不考慮text和ntext),開建立數(shù)據(jù)庫中,對(duì)這四種類型往往比較模糊,這里做一下對(duì)比。
定長或變長
所謂定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒有達(dá)到指定的長度時(shí)將自動(dòng)以英文空格在其后面填充,使長度達(dá)到相應(yīng)的長度;有var前綴的,表示是實(shí)際存儲(chǔ)空間是變長的,比如varchar,nvarchar變長字符數(shù)據(jù)則不會(huì)以空格填充,比較例外的是,text存儲(chǔ)的也是可變長。
Unicode或非Unicode
數(shù)據(jù)庫中,英文字符只需要一個(gè)字節(jié)存儲(chǔ)就足夠了,但漢字和其他眾多非英文字符,則需要兩個(gè)字節(jié)存儲(chǔ)。如果英文與漢字同時(shí)存在,由于占用空間數(shù)不同,容易造成混亂,導(dǎo)致讀取出來的字符串是亂碼。Unicode字符集就是為了解決字符集這種不兼容的問題而產(chǎn)生的,它所有的字符都用兩個(gè)字節(jié)表示,即英文字符也是用兩個(gè)字節(jié)表示。而前綴n就表示Unicode字符,比如nchar,nvarchar,這兩種類型使用了Unicode字符集。
基于以上兩點(diǎn)來看看字段容量
char,varchar 最多8000個(gè)英文,4000個(gè)漢字
nchar,nvarchar 可存儲(chǔ)4000個(gè)字符,無論英文還是漢字
使用(個(gè)人偏好)
如果數(shù)據(jù)量非常大,又能100%確定長度且保存只是ansi字符,那么char
能確定長度又不一定是ansi字符或者,那么用nchar;
對(duì)于超大數(shù)據(jù),如文章內(nèi)容,使用nText
其他的通用nvarchar
char、varchar、nchar、nvarchar特點(diǎn)比較
CHAR
CHAR存儲(chǔ)定長數(shù)據(jù)很方便,CHAR字段上的索引效率級(jí)高,比如定義char(10),那么不論你存儲(chǔ)的數(shù)據(jù)是否達(dá)到了10個(gè)字節(jié),都要占去10個(gè)字節(jié)的空間。
VARCHAR
存儲(chǔ)變長數(shù)據(jù),但存儲(chǔ)效率沒有CHAR高,如果一個(gè)字段可能的值是不固定長度的,我們只知道它不可能超過10個(gè)字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實(shí)際長度是它的值的實(shí)際長度+1。為什么"+1"呢?這一個(gè)字節(jié)用于保存實(shí)際使用了多大的長度。
從空間上考慮,用varchar合適;從效率上考慮,用char合適,關(guān)鍵是根據(jù)實(shí)際情況找到權(quán)衡點(diǎn)。
TEXT
text存儲(chǔ)可變長度的非Unicode數(shù)據(jù),最大長度為2^31-1(2,147,483,647)個(gè)字符。
NCHAR、NVARCHAR、NTEXT
這三種從名字上看比前面三種多了個(gè)"N"。和char、varchar比較起來,nchar、nvarchar最多存儲(chǔ)4000個(gè)字符,不論是英文還是漢字;而char、varchar最多能存儲(chǔ)8000個(gè)英文,4000個(gè)漢字。可以看出使用nchar、nvarchar數(shù)據(jù)類型時(shí)不用擔(dān)心輸入的字符是英文還是漢字,較為方便,但在存儲(chǔ)英文時(shí)數(shù)量上有些損失。
所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數(shù)字,用char/varchar。
2數(shù)據(jù)庫的 int smallint tinyint的區(qū)別
Unicode 規(guī)格通過采用兩個(gè)字節(jié)編碼每個(gè)字符使這個(gè)問題迎刃而解。轉(zhuǎn)換最通用商業(yè)語言的單一規(guī)格具有足夠多的 2 字節(jié)的模式 (65,536)。因?yàn)樗械?Unicode 系統(tǒng)均一致地采用同樣的位模式來代表所有的字符,所以當(dāng)從一個(gè)系統(tǒng)轉(zhuǎn)到另一個(gè)系統(tǒng)時(shí),將不會(huì)存在未正確轉(zhuǎn)換字符的問題。通過在整個(gè)系統(tǒng)中使用 Unicode 數(shù)據(jù)類型,可盡量減少字符轉(zhuǎn)換問題。 Unicode 數(shù)據(jù)使用 SQL Server 中的 nchar、varchar 和 ntext 數(shù)據(jù)類型進(jìn)行存儲(chǔ)。
bigint 從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字)。存儲(chǔ)大小為 8 個(gè)字節(jié)。
int 從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。存儲(chǔ)大小為 4 個(gè)字節(jié)。
smallint 從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數(shù)據(jù)。存儲(chǔ)大小為 2 個(gè)字節(jié)。
tinyint 從 0 到 255 的整型數(shù)據(jù)。存儲(chǔ)大小為 1 字節(jié)。
3數(shù)據(jù)庫的date,datetime,timestamp 的區(qū)別
date 表示年月日,如YY-MM-DD
datetime 表示年月日和時(shí)間信息,如YY-MM-DD HH:MM:SS
datestamp 和datetime表示的信息相同,但時(shí)間范圍不同
時(shí)間范圍
date -- > '1000-01-01' to '9999-12-31'.
datetime --> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
datestamp -- > '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
儲(chǔ)存設(shè)置
timestamp
1.4個(gè)字節(jié)儲(chǔ)存(Time stamp value is stored in 4 bytes)
2.值以UTC格式保存( it stores the number of milliseconds)
3.時(shí)區(qū)轉(zhuǎn)化 ,存儲(chǔ)時(shí)對(duì)當(dāng)前的時(shí)區(qū)進(jìn)行轉(zhuǎn)換,檢索時(shí)再轉(zhuǎn)換回當(dāng)前的時(shí)區(qū)。
datetime
1.8個(gè)字節(jié)儲(chǔ)存(8 bytes storage)
2.實(shí)際格式儲(chǔ)存(Just stores what you have stored and retrieves the same thing which you have stored.)
3.與時(shí)區(qū)無關(guān)(It has nothing to deal with the TIMEZONE and Conversion.)
轉(zhuǎn)載于:https://www.cnblogs.com/zengxianjie/archive/2012/01/17/2324282.html
總結(jié)
- 上一篇: MySQL事件调度器(Event Sch
- 下一篇: Oracle数据库用户角色、表空间创建、