SqlSever: nvarchar 与 varchar 有什么区别?

许多小伙伴在设计表时,不太明白 varchar 和 nvarchar 有什么区别,直接用 varchar 来代替nvarchar 了。实际上使用时,好像也能用,存储汉字英文都没问题。

下面用一个简单的示例,说明两者的区别:

DECLARE @t TABLE (
	c1 VARCHAR(20),
	c2 NVARCHAR(20)	
)
INSERT INTO @t(c1,c2) VALUES (N'မြန်မာဘာသာ',N'မြန်မာဘာသာ');

SELECT * FROM @t
/*
c1	          c2
??????????	မြန်မာဘာသာ
*/

SqlSever: nvarchar 与 varchar 有什么区别?_第1张图片

上面插入缅文(你好)时,varchar直接就乱码了。

当然,不一定得非缅文,其它一些不常见的字符也有可能导致报错。

所以,英文和数字,就用 varchar ,这个比较节省空间。

但可能存储英文和数字之外的字符,那还是 nvarchar 吧。 

-------------------------------------------------------------------------------------

另外一个注意点:不要将字段定义为 null, 而是所有字段都定义为 not null。

这样有什么好处呢?

程序员都知道,一个最容易发生的异常就是:未将对象引用设置到对象的实例

说白了,就是某个地方的对象或属性为 null 了。

如果我们将字段全定义为 not null ,就很大程度上避免了这种事情的发生,何乐而不为?

你可能感兴趣的:(SQL,Server,sql,数据库,mysql)