MySQL中資料型別(char(n)、varchar(n)、nchar(n)、nvarchar(n)的區別)

Joerrot發表於2018-08-31

char(n)和varchar(n)的區別:

在這裡我們可以清楚的看到他們表面的區別就是前面是否有var,在這裡解釋一下var是什麼意思,var代表“可變的”的意思

下面看個例子:

char(4)//char代表的是字元的意思,這在Java中學過,一個漢字代表一個字元,2個位元組;一個英文代表一個字元,一個位元組。而這裡char(n),(除了它,其餘三個都是如此)n是代表位元組數,現在我們假如儲存‘abcd’(4個位元組,所以可以儲存),再假如儲存‘中國你好’(8個位元組,所以不能儲存),再假如儲存‘ab’(由於是有四個位元組,而現在ab只佔兩個位元組,所以用兩個空格補上後面的兩個位元組,所以資料庫的資料為‘ab ’) 
varchar(4)//同樣我們以上面的例子舉例,假如儲存‘abcd’(4個位元組,所以可以儲存),再假如儲存‘中國你好’(8個位元組,所以不能儲存),再假如儲存‘ab’(由於是有四個位元組,而現在ab只佔兩個位元組,然而varchar(n)是由var開頭的,資料是可變的,所以不用像char(4),用空格補位元組的方法,而是可以直接省略空格,所以資料庫的資料還是‘ab’)

nchar(n)和nvarchar(n)

同樣我們先弄清楚以n開頭的資料型別是什麼意思,已n開頭表示此字元是unicode編碼的格式,不是以n開頭的自然不是unicode編碼格式。我們在前面說過,括號裡面的n是代表位元組數,而在這裡,由於是unicode編碼格式,所以n代表2n個位元組數,同樣以上面的例子舉例:

nchar(4)//既然是unicode編碼格式並且不是可變的,所以總共可以儲存2*4=8個位元組,我們現在假如儲存‘abcd’(由於是隻佔四個位元組,所以在資料庫中的資料為‘abcd ’),假如儲存‘中國你好’(則完全可以存放) 
nvarchar(4)//既然是unicode編碼且為可變的,所以儲存‘abcd’(在資料庫中的資料為‘abcd’,不會再補空格)

最後,總結一下,var代表可變的,n開頭代表是unicode編碼。

相關文章