sql裡資料型別nchar 10 為什麼能存漢字,c

時間 2021-08-30 16:15:20

1樓:和洛雨

這個得看你字元是按照什麼樣的編碼規則

1、如果是單位元組編碼,舉個例子ascii,乙個字元(準確來說是英文本元)是用乙個位元組編碼的,而按照ascii的拓展編碼(具體是哪個編碼規則忘了,不過可以統稱ansi),乙個漢字是用兩個字元表示,所以在此編碼規則下,存放乙個漢字(兩個字元)需要兩個位元組,而char(10)中的10指的是字元個數,而不是多少位元組(雖然在這種編碼下得到的結果一樣,因為乙個字元對應乙個位元組,但是對於雙位元組編碼的不是這樣理解的),所以char(10)可以存10個字元,兩個個字元表示乙個漢字,所以最多存5個漢字。

2、如果是雙位元組編碼,乙個字元(這裡的字元不僅僅包括英文本元,還包括中文字元即漢字,以及其他的字元)是用兩個位元組編碼的,nchar()儲存的是unicode字元,它是採用雙位元組編碼規則,即乙個字元相當於兩個位元組,但是nchar(10)其實不需要考慮到位元組問題,這個10指的就是字元個數,在此規則下漢字和英文本元一樣的性質,所以nchar(10)就能存10個漢字。

總結:發生這樣的疑惑主要是,單位元組編碼沒有把漢字等同於一般的字元例如英文本元,而是採用兩個一般的字元來表示乙個漢字,而雙位元組編碼一視同仁,說到字元就是指所有字元,包括漢字。

2樓:匿名使用者

char 和 varchar

固定長度 (char) 或可變長度 (varchar) 字元資料型別。

nchar

根據 unicode 標準所進行的定義,用給定整數**返回 unicode 字元。

char是固定長度的位元組,varchar是可變長度的位元組,nchar是unicode編碼的固定字元長度。

如:12345 在char(6)儲存為123456加乙個空格,共6個位元組。

中國 在char(6)儲存為中國加兩個空格,共6個位元組。

12345 在varchar(6)儲存為123456,共5個位元組。

中國 在varchar(6)儲存為中國,共4個位元組。

nchar(6)對漢字和半形字元處理時一樣的,即可以儲存6個漢字,也可以儲存6個字母

■●為什麼nvarchar(10)可以存10個漢字,varchar(10)只能存5個漢字呢?

3樓:匿名使用者

nvarchar 和 varchar 的區別是儲存方式不同varchar在sql server中是採用單位元組來儲存資料的,nvarchar是使用unicode來儲存資料的。中文字元儲存到sql server中會儲存為兩個位元組(一般採用unicode編碼),英文本元儲存到資料庫中,如果欄位的型別為varchar,則只會占用乙個位元組,而如果欄位的型別為nvarchar,則會占用兩個位元組。 varchar(40),能儲存40個位元組長度的字元,儲存中文字元的時候,因為中文字元1個字元就等於2個位元組,所以varchar(40)只能儲存20個中文字元。

nvarchar(40),就可以儲存40個中文字元,也就是說可以儲存80個位元組長度的字元。nvarchar要相對於儲存的字元型別.

正常情況下,我們使用varchar也可以儲存中文字元,但是如果遇到作業系統是英文作業系統並且對中文字型的支援不全面時, 在sql server儲存中文字元為varchar就會出現亂碼(顯示為??).而且正常情況下,主機都會支援中文的環境,所以如果使用varchar來儲存資料,在開發階段是發現不了的.多數情況下,在佈署的時候也不會有問題.但是!如果佈署的主機是英文作業系統,並且不支援中文環境,那問題就出來了.所有的varchar欄位在儲存中文的時候都會變成亂碼(顯示為??

).而且一般情況下你不會知道這是因為你採用了錯誤的資料型別來儲存所造成的,你會試著去裝中文字型,試著去設定作業系統的語言環境...這些都不能解決問題,唯一能解決問題的是把資料庫欄位的型別個性為nvarchar(或者nchar).對專案管理比較熟悉的朋友應該都知道,到佈署階段再來修改資料庫是乙個很恐怖的事情.

當然,使用nvarchar儲存英文本元會增大一倍的儲存空間.但是在儲存代價已經很低廉的情況下,優先考慮相容性會給你帶來更多好處的.

4樓:匿名使用者

nvarchar (10) 裡面的 10 是 10個 國際化字元 的長度, 也就是 可以存 10個 漢字

varchar(10)裡面的 10 , 相當於 10個 位元組, 可以存 10個 字母或者數字。

乙個漢字 需要 2個位元組的儲存空間來儲存

5樓:匿名使用者

單個char佔1個位元組,varchar(10)相當於乙個可變char陣列,大小為10位元組。

乙個nchar佔2個位元組。nvarchar(10)佔20個位元組。

乙個漢字兩個位元組。

sql server中的char(10),nchar(10),varchar(10),nvarchar(10)分別是什麼意思?

6樓:匿名使用者

首先,帶n的和不帶n的,只是輸入字元的全形和半形佔字元的問題。

char(10)是固定10個字元位子,比如你輸入2個字元,它返回的還是10個字元,多餘的8個字元用空格代替了。

varchar(10)是自動縮排,比如你輸入2個字元,它返回的就是兩個字元

sql sever中char(10)、nchar(10)、varchar(10)、nvarchar(10)分別相當於幾個字母幾個數字

7樓:光子炮

都表示 最大字元數量為10

漢字方面,char(10)和varchar(10)最大支援5個,其它10個

8樓:神小忘

char(10)和varchar(10)是ascii表示,ascii是10個,漢字五個!

剩下的,不管漢字、ascii都是十個!

9樓:

10個字母10個數字5個漢字。

SQL中資料型別有哪些

灬 sql server?大體的分為 字元,2進製,數值,日期,其他型別 oracle啊 mysql db2 基本都是這樣.只是小的 差距.字元 有 char n 固定長度的字串。最多 8,000 個字元。n varchar n 可變長度的字串。最多 8,000 個字元。varchar max 可變...

sql從char資料型別到datetime資料型別的轉換導致datetime值越界

把book create date改為book create date.tostring yyyy mm dd hh mm ss 因為字元型不能與日期型相加。如下 string sqlstr4 update tbbook setbook type book type book create date...

sql中儲存較大的資料用什么資料型別 或者儲存較大的資料怎么儲存

二進位製用這個 image 二進位制資料型別 image 資料型別用來儲存變長的二進位制資料,最大可達231 1或大約20億位元組 整數用這個 int 整型 int 資料型別可以儲存從 231 2147483648 到231 2147483 647 之間的整數。儲存到資料庫的幾乎所有數值型的資料都可...