关于nvarchar字段插入中文后显示乱码???问题的解决

问题:

nvarchar类型的字段用Insert语句插入中文值后显示为乱码“????”,?号数量不等,视中文字数而定。

环境:Windows 2003 + SQL Server 2005 中文版。

表结构语句为:

SQL代码
  1. USE [dental_web]       
  2. GO       
  3. /****** 对象:  Table [dbo].[qualitys]    脚本日期: 04/04/2012 14:09:25 ******/       
  4. SET ANSI_NULLS ON       
  5. GO       
  6. SET QUOTED_IDENTIFIER ON       
  7. GO       
  8. SET ANSI_PADDING ON       
  9. GO       
  10. Create TABLE [dbo].[qualitys](       
  11.     [upldate] [datetime] NULL CONSTRAINT [DF_qualitys_upldate]  DEFAULT (getdate()),       
  12.     [lu] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,       
  13.     [ru] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,       
  14.     [ld] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,       
  15.     [rd] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,       
  16.     [s_time] [datetime] NULL,       
  17.     [o_doctorunit] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,       
  18.     [o_doctor] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,       
  19.     [o_sick] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,       
  20.     [o_producttype] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,       
  21.     [o_mainstuff] [nvarchar](200) COLLATE Chinese_PRC_CI_AS NULL,       
  22.     [o_no] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL       
  23. ON [PRIMARY]   
  24.       
  25. GO   
  26. SET ANSI_PADDING OFF  

 

用于插入的SQL语句:

XML/HTML代码
  1. insert into qualitys 
  2. (lu,ru,ld,rd,s_time,o_doctorunit,o_doctor,o_sick,o_producttype,o_mainstuff,o_no)    
  3. values    
  4. ('','','6','','2012-03-18','惠爱口腔','田医生','曹光辉','钴铬金属冠','','JC005779') 

按理,即使是varchat类型的字段放中文值也不会显示为乱码的,是与insert有关系吗? 与“SET ANSI_PADDING OFF”有关系吗?

有一种方法是在汉字串值的前面加N,但对于我这种情况来说不现实,因为语句是从某软件导出来的,除非改程序,再就是要对语句进去分析,在可以用到汉字的字段的值前判断并加N,但这个好像有点复杂,还是从根本上把乱码的问题解决才好。

 

解决

与insert没有关系, 与“SET ANSI_PADDING OFF”也没有关系。或许是与整个数据库的属性有关系。

处理方法是:删除表,删除数据库,重新建库,再建表。建库的时候,排序规则就选Chinese_PRC_90_CI_AS(这是CSDN上一网友指导的),再用上面的Create Table语句建表(字段的排序规则在SQL语句里有了)。

 

今天顺便也把SQL登录用户与数据库对应的操作方法演练了一遍。简述如下:

“安全性”\“登录名”右击新建

常规:输入用户名,选“SQL Server身份验证”,去掉“强制密码过期”的勾选,选择“默认数据库”。

用户映射:选择使用该登录名登录到的数据库(窗口上的文本说明让人摸不着头脑:“映射到此登录名的用户(D)”)

数据库角色成员身份应该选上:db_datareader、db_datawriter、db_owner

状态:选择“授予”、“启用”就好了。



[本日志由 ancher 于 2012-04-26 02:30 PM 更新]
上一篇: VS快捷键大全
下一篇: 从EXCEL表格导数据到MS SQL 2005遇到的问题
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: SQL nvarchar 中文 乱码 SQL 用户
相关日志:
评论: 2 | 引用: 0 | 查看次数: 6592
ancher[2012-04-26 02:31 PM | | | 61.144.226.117 | del | 回复回复]
板凳
直接是KCF编辑器里的代码显示样式。
林肆[2012-04-21 07:23 PM | 访问 http://www.lsnote.com | | 111.180.96.202 | del | 回复回复]
沙发
你这个代码加入了行号,是直接用的插件,还是仅仅HTML代码捏?求指点~
回复来自 ancher ancher 回复 [2012-04-26 02:31 PM]
直接是KCF编辑器里的代码显示样式。
发表评论
你没有权限发表评论!