char, varchar, nchar, nvarchar
那么到底要用哪种型态比较适合,这些型态之间有何差异呢 ??
意义与差异
从这些字眼上来看,都是有char,差别在var与n这两个字眼,那么就先来简单介绍一下这两个字眼代表的意义:
var:不定长度→有多长存多长
n:Unicode→无论英文、数字、中文、日文、...每个字都占2Byte。
说明一下:
char与nchar宣告的是固定的长度,因此如果宣告char(5),但是只放a这个字,那么就会补另外4个空白,会补空白补满是他的特性,而nchar(5)也是会放满5个字,但是每个字无论中英数都会用2个Bytes来存放
varchar与nvarchar都是不定长度,因此如果宣告varchar(5),但是只放a这个字,那么就会放一个a,不会补空白。而如果宣告nvarhcar(5)那还是只放a这个字,但是会用2Bytes来存放。如果放了【中】这个中文字,在varchar会占用2个位子,但是nvarchar指占用1个位子。
举个例子来看
假设有四个字段,分别放入【a1中】这样的字符串,比较一下这些的差异如下:
数据类型
| 内容
| 占位数
| Byte数
|
char(10) | a1中+6个空白 | 10 | 10 |
varchar(10) | a1中 | 4 | 1+1+2=4 |
nchar(10) | a1中+7个空白 | 10 | 20 |
nvarchar(10) | a1中 | 3 | 2*3=6 |
再来一个比较char(10)与nchar(10)
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|
|
|
|
|
|
|
|
|
|
char(10) | a | 1 | 中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
| 2位 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||||||||
nchar(10) | a |
| 1 |
| 中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
因此在规画上,只要存放的数据有可能有中文,小喵就会加n。而除非确定数据固定会是几位不变,不然数据长度不特定就会宣告加上var。