sqlserver2008 字符串类型varchar,nvarchar,nchar之间的区别

平时都没怎么注意sqlserver字符串的写法,以为它和mysql一样默认是varchar,然而不是。。。

然而今天在查询数据库数据时死活查不到,后来才发现从前台读取的数据后面含有大量空格 ,而前台jsp读取的数据是从数据库里预先读取动态生成的

这下我才注意到数据表里的字符串都是用nchar定义的,而不是varchar,查了资料发现它们的区别

区别

CHAR,NCHAR 定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码

char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

其实概括起来就是,nchar定长,nvarchar不定长,varchar不定长,nchar和nvarchar采用Unicode编码,在有中文英文混杂的存储上不容出错,但是如果字符串长度小于定义的,都会在后面用空格补齐,比如nchar(10)你的字符串只有5个,那么剩下5个都是用空格补齐,这在数据查询上很是麻烦,因为含有空格的字符串在数据表里根本查不到,而varchar不定长,貌似也会用空格自动补齐

解决办法:
在后台用字符串的replaceAll函数,即:String s=s.replaceAll(" ","");把字符串的所有空格去掉,在查询就ok了

说的也不是特别明白,小白暂时就这样记着,sqlserver真是麻烦,还不如mysql

猜你喜欢

转载自www.cnblogs.com/senn0213/p/9061781.html