当前位置: 代码迷 >> Sql Server >> 韩文写数据库乱码改成nvarchar后又必须加N
  详细解决方案

韩文写数据库乱码改成nvarchar后又必须加N

热度:70   发布时间:2016-04-24 10:05:28.0
韩文写数据库乱码改为nvarchar后又必须加N
各位好,现在小弟遇到一难题,求解。
现在有一套现成的CS中文系统,要给韩国人用,数据库是sqlserver2000,数据库设计的时候字符串类型选择的都是varchar或char.
这两种类型的字段如果写进了韩文则显示问号乱码。后来了解了一下要改为nvarchar和nchar。并且必须在update,insert,select的条件中涉及到这些字段的地方都要N。如update a set a.field1=N'韩文' where a.field1=N'韩文',不加N显示乱码或者查询不到。因为现在系统是现成的,系统架构做的也不是很好,各个form单元里都直接写了不少的sql语句,还有许多存储过程,视图。这样要都加N,可费了大劲了。请问各位老师哪位有没有好的解决办法,不用加这个N的。比如换成韩文版的sqlserver或者换成韩文版的操作系统,或者采用最新版的sqlserver。难道韩国人开发的时候写数据库都必须要加N吗。
有什么观点和见解,欢迎与大家共享。 
------解决方案--------------------
转载的。try
这段时间客户提出要将发布韩文的需求,蛮麻烦的,解决了存入数据库和显示的问题,但是数据修改的时候很麻烦,虽然问题不大,但是很恼人,找了一天了,还是没有很好的解决方案,就自己写了一个,问题是解决了,但是个人认为肯定还有更好的解决方案,希望各位不吝赐教!

一、韩文存入数据库解决方案

1.数据库存储多语言的字段要用NText or Nvarchar,才支持多语言,以unicode存储 
2.Sql语句如 insert table (a) values(N'value')才可以,update也同样了 
3.web页面要用utf-8编码,最好加上<META http-equiv="Content-Type" content="text/html; charset=Unicode">


二、显示数据库中的韩文

韩文存到数据库中,HTML格式的如:& # 5 1 0 6 4 ;& # 5 3 5 5 2 ;& # 4 5 3 6 7 ; (??? )
我添加到数据库中,显示的时候没有问题,因为用HTML控件就可以解决了,如:DIV,总之在HTML格式下面就能解决的。

三、修改数据库中的韩文

修改数据库中的韩文分二种情况:
1、HTML编辑器:这个就是支持HTML的,所以根本不需要理会就可以直接转换,不需要我们操心
2、对于标题之类的短的文字,我们采用的TextBox中就出现了大问题,他显示不了韩文显示的效果是& # 5 1 0 6 4 ;& # 5 3 5 5 2 ;& # 4 5 3 6 7 ;(??? ),这个我找了很久的解决的方案,都没有解决的。
具体方案如下:
只要TextBox支持HTML格式就OK了,但偏偏TextBox只支持纯文本,HTMLEnCode、HTMLDeCode函数无计可施。

此时我采用一个使用HTML作为中转的方案暂时解决了修改韩文的问题
步骤:
1 前台建立一个服务器端DIV:<div id="txtChg" runat="server"></div>
2 后台将HTML格式数据赋值到DIV上
txtChg.InnerHtml = Dr["sContent"].ToString();
3 隐藏Div:txtChg.Attributes["style"] = "display:none";
4 前台将Div的数值赋给TextBox:onload="javascript:document.getElementById('txtTitle').value = document.getElementById('txtChg').innerHTML"

OK,就这样暂时解决了这个烦人的小问题,如果哪位仁兄有更好的方案,请指教!

------解决方案--------------------
数据库安装时,有语言可以选择。
如果你安装选择的是 中国 简体,那么varchar只能存简体字,台湾繁体字保存会出现?号,而 nvarchar要输入繁体必须加N;
同理,
如果你安装选择的是 韩国 韩文,那么varchar只能存韩文,其他字保存会出现?号,而 nvarchar要输入繁体必须加N;

这个应该跟编码有关系。简体字一般是GB2313,繁体字的大部分是Big5.
------解决方案--------------------
建议,
1.服务器windows需装韩文语言包,
2.控制面板-->区域和语言-->位置-->当前位置-->选择韩国.
------解决方案--------------------
可以参考3楼的
------解决方案--------------------

一般在cmd窗口运行chcp命令就可以知道当前活动代码页了,

简体中文版是936,即GBK编码,同时支持简体和繁体中文,繁体中文版是即Big5编码,只支持繁体中文,
本地代码页之外的字符一般都显示为?,需要nvarchar字段类型来解决。

韩文版操作系统的代码页应该支持韩文字符,所以在SQLServer的char或varchar字段中韩文字符不会显示为?。
------解决方案--------------------
我们SQL2000数据库,有几个字段保存了简,繁,英,韩,日,泰等几种语言的文字。

字段是用的 nvarchar 

不是说所有的多语言字段都要加上N,而是只需要在 where 条件查询后边 带N ,update a set a.field1='韩文' where a.field1=N'韩文',这样是可以的。

在后台查询分析器里面看到不乱码后,还要看前台程序的显示支不支持多语言了~
  相关解决方案