3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
普及字符是如何被存儲(chǔ)的。在計(jì)算機(jī)中,所有數(shù)據(jù)都是用0和1這樣的位來描述。一個(gè)字節(jié)有8位,因此一個(gè)字節(jié)最多可以描述256個(gè)字符。在歐美國(guó)家,比如美國(guó),他們的文字字符主要就是26個(gè)字母加上一些特殊符號(hào)(+-*/等),用一個(gè)字節(jié)就可以存儲(chǔ),一個(gè)國(guó)家使用的所有字符就是一個(gè)code page,用一個(gè)字節(jié)存儲(chǔ)字符的code page 叫做single-byte code page。但是在亞洲的一些國(guó)家,比如中國(guó),常用漢字有幾萬(wàn)個(gè),根本不能用一個(gè)字節(jié)來表示所有的漢字字符,因此需要用兩個(gè)字節(jié)描述。因?yàn)閮蓚€(gè)字節(jié)有16位,最多可以描述65536個(gè)字符,足夠用來描述所有漢語(yǔ)字符以及常用字符,這些字符也是一個(gè)code page,不過是double-byte code page,主要針對(duì)的是中國(guó)。每個(gè)國(guó)家都有一個(gè)code page來對(duì)應(yīng)所使用的字符。比如歐美國(guó)家,他們使用拉丁,雖然a-z這26個(gè)字母所對(duì)應(yīng)的二進(jìn)制在code page中是相同的,但是在重音('é'和'á')方面是不相同的。所以如果code page不同,那么相同的二進(jìn)制代碼所表示出來的字符也可能不相同。如果數(shù)據(jù)在不同code page的計(jì)算機(jī)上傳輸,就需要進(jìn)行code page的轉(zhuǎn)換,如果接收方的code page上沒有定義傳輸方傳送過來的特定字符的二進(jìn)制位,那么就會(huì)出現(xiàn)數(shù)據(jù)丟失。
上面講到的這些都是同一個(gè)概念,那就是數(shù)據(jù)庫(kù)中的collation。正如我們前面提到的,每一個(gè)國(guó)家可能都有自己的collation,這樣的話在信息傳輸上會(huì)非常不方面,涉及到collation轉(zhuǎn)換更是煩上加煩。那么用什么方法解決了。這個(gè)時(shí)候就出現(xiàn)了unicode。unicode是一個(gè)大字符表,將全世界上的所有字符都存在一個(gè)2字節(jié)的字符表中,并且全世界所有國(guó)家字符在字符表上都能找到唯一對(duì)應(yīng)的標(biāo)號(hào)。這樣的一個(gè)好處就是我們使用了同意的字符表,就不要轉(zhuǎn)換了。壞處是,想abc這樣的字符,也要占用兩個(gè)字節(jié),而不是原來的一個(gè)自己。
那么在sqlserver如何表現(xiàn)是unicode,在sqlservr中引入了nvarchar和nchar。比如nchar(10),這樣的一個(gè)結(jié)構(gòu)最多可以存儲(chǔ)10個(gè)漢字,也最多只能存儲(chǔ)10個(gè)英文字母。但是所占用的字節(jié)就是20字節(jié)。而加入是char(10)的話,沒有使用unicode,那么就可以存儲(chǔ)10個(gè)英文字母,但是最多只能存儲(chǔ)5個(gè)漢字。
- 3 回答
- 0 關(guān)注
- 1456 瀏覽
添加回答
舉報(bào)