char、nchar、varchar、nvarchar的区别
char、nchar、varchar、nvarchar的区别
char 和 nchar比较:
n:表示Unicode字符集,一个字符用两个字节存储
char支持的是本地默认编码,一般只支持中文和英文还有少部分日语和韩语等。
nchar是Unicode编码,是兼容世界上几乎所有语言的,当然也支持中文。
nchar占用空间比char大。比如char格式下一个字母只占用一个字节,汉语占用两个。
nchar所有字符都占用两个字节。
举例1:
char(10):最大可以有10个字符,占10个字节。最多可以有10个英文或者数字,5个中文。
nchar(10):最大可以有10个字符,占20个字节。最多可以有10个英文或数字,10个中文。
注意:如果char和nchar类型的字符串长度少于括号内长度的话,系统会以空格自动填充。
varchar和nvarchar比较:
var:表示可变长度,意思是按照实际输入长度来计算存储
varchar(n):最大长度为n个字节的可变长度且非Unicode的字符数据。
n 必须是一个介于 1 和 8000 之间的数值。存储大小为输入数据的字节的实际长度,
而不是n个字节。
nvarchar(n):包含n个字符的可变长度Unicode字符数据。
n的值必须介于 1 与 4000 之间。字节的存储大小是所输入字符个数的两倍。
举例1:
varchar(10):最大可以有10个字符(英文数字占用一个字节,汉字占用两个字节),
占字节数取决于实际输入数据的字节大小。
最多可以有10个英文,5个中文。
nvarchar(10):最大可以有10个字符(所有字符都将占用两个字节),
占字节数取决于实际输入数据的字节大小。
最多可以有10个英文,10个中文。
举例2:
两字段分别有字段值:我和coffee
varchar字段占2×2+6=10个字节的存储空间
nvarchar字段占8×2=16个字节的存储空间
所以如果字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar。
注意:
mysql中的varchar需要特别说明:
4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)
(国家标准GB2312: 一个汉字=2个字节 UTF-8:一个汉字=3个字节)
5.0版本以上,varchar(100),指的是100字符,
无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。
