SQLSever 2005 无法识别中文(字段值“?”,sql语句中无法识别中文)

        在使用sqlserver时发现数据库的表中无法插入中文字符,所有中文字符在表中均显示为“?”,即使解决了“?”输入以后在查询分析器中使用sql语句进行相关数据(查询语句中含有中文)的查询查到的结果为空,这又是为什么?下面就这个问题做一下阐述。

        背景知识:众所周知英文字符如果是Ascii编码的话只需要一个字节就够了,但是如果想要存储汉字或者是别的需要大存储容量的字符话用Ascii码就显得力不从心了,所以从兼容世界多文化的角度出发,unicode编码方式就出现了。这种编码方式规定无论是英文字符还是汉字字符还是其他语言的字符,统统规定为一个unicode字符,每个unicode字符用两个字符用两个字节表示。

       这就出现了在数据库表中字段值有char(),nchar(),varchar() ,nvarchar()等类型的情况(至于这四种类型网上资料甚多,在此仅作简要说明)。其实这四种类型是很容易区分的,前面带有“n”的表示的‘national’的意思,即表明该字符的编码方式为unicode编码方式,而不带“n”的表示的非unicode的编码方式(ascii编码)。带有“var”字符的表示的是可变长度的类型,不带“var”字符的表示的固定长度的类型。

       在使用sql2005的时候如果你选定的字符类型是char()或者是varchar()那么,当你的字段值中含有汉字的时候便会出现乱码情况,解决方式也非常的简单,将其类型改为nchar或着nvarchar()即可。但是当我们改变字段值类型后如果在查询分析器中使用含有汉字的sql语句如:select* from table where name=‘小明’,可能出现的问题是我们查出的结果中不显示该条记录的信息,也不会报错(表中记录确实含有name为‘小明’的记录)。这是由于我们在安装sql2005时的一个小疏忽导致的。有安装向导的指引我们很容易的根据提示“下一步”一路完成安装,但是其中有一个小地方是我们很容易忽略的,那就是数据库的排序规则。系统默认的排序规则是拉丁文SQL_Latin1_General_CP1_CI_AS并不是中文,所以才会出现上述问题。其解决方法也相当的简单,在我们建立数据库的时候指定默认规则为中文Chinese_PRC_BIN( _BIN 二进制排序,_CI(CS) 是否区分大小写,CI不区分,CS区分,_AI(AS) 是否区分重音,AI不区分,AS区分,_KI(KS) 是否区分假名类型,KI不区分,KS区分 ,_WI(WS) 是否区分宽度WI不区分,WS区分 其他形式同样为可选择形式)。当然如果觉得每次建立数据库时都需要改很麻烦,我们可以重装sql2005然后选择相应的中文排序规则就可以了。

 

你可能感兴趣的:(sql,数据库,table,存储,sqlserver,语言)