SqlServer中char,varchar,nchar,nvarchar的区别
在数据库中建表时,总是习惯的将一些字段定义为nvarchar,但关于它和nchar的区别,却没有细究过,今天上网仔细了解一下做个总结:
1.n代表的是Unicode字符,可以解决多语言字符集之间的转换问题。带上'n',表示你的字符串中汉字、英文字符、数字等等,存储时都是占用两个字节,这是为了防止出现乱码考虑的,而不带'n'的(char,varchar),存储时英文字符、数字占用一个字节,汉字占用两个字节。
2.‘var‘,显然是可变的意思,在sqlserver中就代表了可变存储,比如,定义了name字段:varchar(60),为其填充数据张三,则只占用6个字节,剩余54个字节未被占用(倒是节省了存储空间喔),对比而言,没有'var'的就是固定存储,上例如果定义name字段为char(60),同样填充数据张三的话,虽然也是占用6个字节,但剩余54个字节会用空格填充,也就是说,定义为固定存储的情况下,无论实际用了多少存储空间,所有空间都会被占用。
3.存储容量对比:char,varchar最多8000个英文,4000个汉字;nchar,nvarchar可存储4000个字符,无论英文还是汉字。
4.速度对比:固定存储比可变存储速度上快的多,但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉。
实际中使用的一般是varchar和nvarchar,二者再做个对比:
1.存储方式上,nvarchar是按字符存储的,varchar是按字节存储的。
2.存储量上,varchar节省空间,因为存储大小为字节实际长度,而nvarchar是双字节存储。
3.使用中,如果确定存储内容都是英文字符而没有汉字等语言符号,建议用varchar,含有汉字使用nvarchar(避免乱码)
以上是网上浏览加个人理解后的总结,重要的是理解了'n'与'var'的含义。