使用数据库储存文字的数据,在数据库中会有以下这些的型态可以设定
char, varchar, nchar, nvarchar
那么到底要用哪种型态比较适合,这些型态之间有何差异呢??
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。
Microsoft MVP ASP/ASP.NET |
topcat |