SQL Server 2005 中文乱码解决

原创 2009年04月21日 14:52:00

 中文存到数据库中总是显示乱码。DEBUG发现页面中文到Service都是正确的中文。试着在数据库中把字段值改为中文(字段类型为Nvarchar),结果页面上可以正确显示,说明页面设置正确。 问题出在数据库层。

后来检查数据库连接字段,发现一个参数

sendStringParametersAsUnicode=false

将其改为 sendStringParametersAsUnicode=true 问题解决。

查MSDN资料

 

如果 sendStringParametersAsUnicode 属性设置为“true”,则字符串参数将以 Unicode 格式发送给服务器。

如果 sendStringParametersAsUnicode 属性设置为“false”,则字符串参数将以非 Unicode 格式(例如 ASCII/MBCS 而不是 Unicode)发送给服务器。

sendStringParametersAsUnicode 属性的默认值为“true”。

 

注意注意:
在 JDBC Driver 2.0 中,只有在发送 CHARVARCHARLONGVARCHAR JDBC 类型的参数值时才检查 sendStringParametersAsUnicode 属性。新的 JDBC 4.0 区域字符方法(例如 SQLServerPreparedStatement 类和 SQLServerCallableStatement 类的 setNStringsetNCharacterStreamsetNClob 方法)始终以 Unicode 格式将参数值发送给服务器,而与此属性的设置无关。 为了获得 CHARVARCHARLONGVARCHAR JDBC 数据类型的最佳性能,使用 JDBC Driver 2.0 的应用程序应将 sendStringParametersAsUnicode 属性设置为“false”,并使用 SQLServerPreparedStatementSQLServerCallableStatement 类的 setStringsetCharacterStreamsetClob 非区域字符方法。 当应用程序将 sendStringParametersAsUnicode 属性设置为“false”,并在服务器端使用非区域字符方法访问 Unicode 数据类型(例如,ncharnvarcharntext)时,如果数据库排序规则不支持非区域字符方法传递的字符串参数中的字符,则有些数据可能会丢失。 请注意,对于 NCHARNVARCHARLONGNVARCHAR JDBC 数据类型,应用程序应使用 SQLServerPreparedStatementSQLServerCallableStatement 类的 setNStringsetNCharacterStreamsetNClob 区域字符方法 
问题解决,原来是字符集问题。
附:Struts2中可能会出现的中文问题
注:在当前项目中我只是把页面字符全部设为UTF-8,没有做别的设置,中文字段工作良好。
. 在struts2里面,最好将所有字符都设成utf-8。 <%@ page contentType="text/html; charset=UTF-8"%> <%@ page pageEncoding="UTF-8" %>1.1 在jsp页面设定字符编码。这边有必有说明的是如果是jsp+java bean+servlet的方案,中文乱码很好解决,统一设成gb2312就可以了。    1.2 使用struts框架字符集不能设成gb2312,要改成utf-8。
 2. 在struts.properties 添加:
struts.devMode=false struts.enable.DynamicMethodInvocation=true struts.i18n.reload=true struts.ui.theme=simple
struts.locale=zh_CN struts.i18n.encoding=UTF-8
struts.serve.static.browserCache=false struts.url.includeParams=none
其中locale、encoding就是字符集的设定了。
  3. 在web.xml加个filter
  <!-- zh-cn encoding -->    <filter>        <filter-name>struts-cleanup </filter-name>        <filter-class>            org.apache.struts2.dispatcher.ActionContextCleanUp        </filter-class>    </filter>      <filter-mapping>        <filter-name>struts-cleanup </filter-name>        <url-pattern>/* </url-pattern>    </filter-mapping>
     跟上述方法,类似还有在action中设定字符编符.
    HttpServletResponse response = null;    response = ServletActionContext.getResponse();    request.setCharacterEncoding("utf-8");    response.setContentType("text/html;charset=utf-8");


    通过上述方法,基本就可以搞定中文乱码的问题了。当然,也有例外(如web server的版本/数据库的版本等等)。象在我的一个项目碰到一个中文乱码,tomcate5.5是会乱码的,而在tomcate6中就不会。这边就涉及到tomcate connector字符的设置了。
    <Connector port="80" maxHttpHeaderSize="8192"                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"                enableLookups="false" redirectPort="8443" acceptCount="100"                connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

--------------------------------------------------------------------
后记之一:在使用struts2时,仍是遇到一种乱码。后来调试才发现,struts2的web.xml配置是有顺序的。
  在web.xml中EncodingFilter的位置应该在Struts2的FilterDispatcher之前,因为要先调整字符集,然后进入Action。
按照Struts2的API,filter的顺序是 struts-cleanup filter SiteMesh filter FilterDispatcher
--------------------------------------------------------------------
  后记之二:这个方法是下下策了,只有在前面的方法都无效时才使用。
在action中直接使用request.getParameter()时;还是出现乱码。原因分析如下:
  1、getParameter()是有带字符参数的。例:
String s = (String)request.getParameter("txt").getBytes("iso-8859-1");
    2、String也可以带有字符参数。
String(byte[] bytes, String charsetName) 构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。
例:String s = new String("中文","utf-8");
  3、综合上述两点,编写一个类来完成此项任务
  public class ConvertCharacter{
        public String Convert(String s){
            String result;
            byte[] temp ;
            try{
                temp = s.getBytes("iso-8859-1");
                result = new String(temp,"utf-8");
            }
            return result;
        }
  }

request.getParameter乱码的问题
方法一:
通过设置tomcat的配置文件server.xml
Connector port="8080" maxHttpHeaderSize="8192"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      connectionTimeout="20000" disableUploadTimeout="true" uRIEncoding="gbk"/>

方法二:
1: String id=new String(request.getParameter("id").getBytes("ISO8859-1"),"UTF-8"); 

 

 

后记:  
jsp部分 html部分
如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

如果连接了数据库, 最好把数据也考虑在内,

SQL Server 2005 中文乱码解决方法

中文存到数据库中总是显示乱码。DEBUG发现页面中文到Service都是正确的中文。 解决办法: 1.关闭所有与此数据库的相关连接或者会话或者相关程序 2.然后将 SQL_Latin1_Gene...
  • cjs998
  • cjs998
  • 2012年03月13日 12:14
  • 688

使用SQL SERVER2005的时候常常遇到中文字符为乱码的情况

使用SQL SERVER2005的时候常常遇到中文字符为乱码的情况,经过研究发现,设置SQL的排序规则可以解决这个问题。 1、登录服务器打开Microsoft SQL Server Managemen...
  • zhangkongzhongyun
  • zhangkongzhongyun
  • 2015年10月05日 14:42
  • 379

SQL SERVER 2005 Data目录产生大量trc文件

今天用服务器下载文件时,系统提示我硬盘分区空间不足了。点击查看硬盘分区是50GB,已经只剩下175MB了。而这个服务器应该没有什么大文件才对呀。     仔细查看,发现SQL Server 2005...
  • jqrsdsy
  • jqrsdsy
  • 2013年12月06日 14:47
  • 1458

SqlServer数据库中文乱码问题解决

问题:创建新数据库,存入中文显示乱码??? 原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,...
  • u011127019
  • u011127019
  • 2016年05月11日 18:17
  • 10361

SQL 2012中文乱码

MS SQL插入汉字的时候,经常会遇到部分汉字变成了乱码问号了, 所以在安装数据库或者在创建表的时候需要注意一下几点: 1、保存汉字的字段要用NVARCHAR、NCHAR、NTEXT等,插入的时候要...
  • waterxcfg304
  • waterxcfg304
  • 2015年03月19日 11:23
  • 4110

在SQL Server 2005(2008)中用T-SQL插入中文数据时出现的问号或乱码的解决方案

病症表现为:主要表现为用 T-SQL 语句插入中文数据时数据库显示全是问号“???” 解决办法: 第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对...
  • Feng______
  • Feng______
  • 2011年11月08日 21:21
  • 1081

在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法

在Ubuntu 10.04中文版下Qt编程,使用unixODBC和FreeTDS连接MS SQL Server 2005,并且中文不出现乱码的方法 作者 :  汪灏 回头来看,还是很简单的,但是由...
  • sdwfkfq
  • sdwfkfq
  • 2016年03月29日 19:19
  • 268

C#处理MySQL数据库和SQL Server数据库的区别(存储过程的编写与调用、中文乱码、二进制图片存储与调用)

最近忙着用利用webservice做一个信息查询、增加、删除、修改的应用程序。起初数据库用的是SQL server 2005,操作起来什么问题也没遇到过,一路都很顺畅。 但是转到MySQL数据库中时...
  • wzcool273509239
  • wzcool273509239
  • 2012年01月18日 14:23
  • 1943

ASP SQL SERVER 读取中文乱码

在ASP程序中使用SQL SERVER作为数据库时,如果是国外的服务器或空间,可能造成读取和写入中文都是乱码问题,比如godaddy服务器空间的SQL SERVER数据库就有中文乱码问题。 那么...
  • windren06
  • windren06
  • 2013年11月01日 14:38
  • 3711

Mysql运行SQL语句中文乱码问题的解决方法

  • 2012年03月21日 20:54
  • 20KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 2005 中文乱码解决
举报原因:
原因补充:

(最多只允许输入30个字)