积极答复者
char类型不能输入中文,查询显示是乱码,这是什么原因?

问题
答案
全部回复
-
试试类型用 nchar
在 sql 中写入的时候,字符串使用N前导
N'中文'
- 已建议为答案 Teige GaoModerator 2017年12月11日 2:18
- 取消建议作为答案 无问西东 2017年12月11日 2:19
- 已建议为答案 Good Morning Princess 2017年12月11日 3:05
-
char属性是字符集CP936的GBK代码,两个字节的16进制;
nchar属性是Unicode字符集,utf-8格式有一个字节、两个字节、三个字节和多个字节,
GBK汉字按utf-8格式存储是三个字节;
因此char属性存储的汉字和nchar属性存储的汉字是不能互换显示的,
以nchar属性存储的汉字在char属性下显示为‘?’;
必须将字段属性恢复成nchar,才能正常显示。
情况是,在另一个MSSQL SERVER上 建立char字段,可以输入中文,并在查询分析器中显示查询结果为中文
这个显示正常的数据库的排序规则跟 异常的这个MSSQL server是一样的都是 Chinese_PRC_CI_AS
这个怎么解释呢?
-
大致来说,char 是非 unicode,在服务端与客户端交互数据的时候,存在代码页转换的问题,服务端的字符在客户端需要转换为客户端的代码页,这个可能导致原码
用 ncahr 不会产生这种问题,Unicode 是没有代码页转换的
- 已建议为答案 Teige GaoModerator 2017年12月11日 2:19
-
如果要插入的数据中包含中文,建议使用nchar,带n的默认输入的数据不管是中文、英文或者数字都会占两个字节,不带n的默认中文占两个字节,英文占一个字节。为了避免产生乱码建议有中文时使用nchar或nvarchar
- 已建议为答案 Good Morning Princess 2017年12月11日 3:10
-
windows没有utf-8字符集的,只有Unix和Linux才有
Windows SQL Server对中文的支持只能达到GBK二万个汉字,最多加上扩展A区四千个汉字,对扩展B区四万个方块字符(主要来自康熙字典等)无法予以支撑。
Love SQL
- 已编辑 mingxyzonline 2017年12月11日 9:17