php插入中文到sqlserver 2008里出现乱码的解决办法分享_php技巧

今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况:

开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($conn, "set names GB2312");语句来设置传给数据库的编码格式的,sql语句这样写了:insert into Opinion (content) values ('aaa中文内容');

运行这条sql语句,发现执行不成功,用sqlsrv_errors()函数来输出错误信息,得到如下结果:

复制代码 代码如下:

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . [message] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . ) )

  这是在网页上显示的结果,上面的乱码是原封不动copy下来的。从 “An error occurred translating the query string to UTF-16”可以看出是字符编码转换有问题导致的。于是我使用php的iconv函数来对中文进行强制编码转换,然后执行sql语句,代码如下:

复制代码 代码如下:

$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa中文内容');
$sql = "insert into Opinion (content) values ( $string)";
[code]
  这时候又报错了,错误信息如下:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) )

  这个错误信息看不出什么头绪,我又把sql语句输出到网页上看一下是不是sql语句写错了,输出结果如下:

复制代码 代码如下:

insert into Opinion (content) values ( aaa��������)

  咋一看好像没问题,其实是有问题的,注意到后面那个括号里的参数是应该用引号来括起来的(表示它是一个字符串),所以我又修改了sql语句,代码如下:

复制代码 代码如下:

$sql = "insert into Opinion (content) values ( '".$string."')"; 为了看清楚我放大点

  用单引号把$string括起来,这样之后执行sql语句成功,并且数据库里保存的中文没有乱码。

时间: 2024-10-01 19:16:03

php插入中文到sqlserver 2008里出现乱码的解决办法分享_php技巧的相关文章

SQLServer 2008 R2 死锁监控及解决办法

1. 死锁原理     根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态.     死锁的四个必要条件: 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用. 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源. 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺. 循环等待条件(Circular wai

PHP读取mssql json数据中文乱码的解决办法_php实例

PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. 解决办法如下: 这样,sql server 2008中的中文就可以在网页正常显示了. 如果要将中文正常插入到sql server 2008中,还要加入一条代码:$query = iconv("utf-8", "gbk//ignore", $query);//为了解决中文

C#中WebClient使用DownloadString中文乱码的解决办法

原文:C#中WebClient中文乱码的解决办法 第一次尝试:  string question = textBox1.Text.ToString(); WebClient client= new WebClient(); client.Encoding = System.Text.Encoding.GetEncoding("GB2312"); Uri uri = new Uri("http://xxxxxxxxxxxxxx"); textBox1.Text =cl

ListView嵌套在TabActivity里数据不更新解决办法

 ListView嵌套在TabActivity里数据不更新解决办法(暂时解决问题):   TabHost tabHost = getTabHost();      tabHost.addTab(tabHost.newTabSpec("群组名称")     .setIndicator("群组名称")     .setContent(new Intent(this,GroupListActivity.class).addFlags(Intent.FLAG_ACTIVIT

ajax中文乱码各种解决办法总结

 由于XMLHTTP采用的是Unicode编码上传数据,而一般页面采用的是gb2312,这就造成显示页面时产生乱码.而当在获取页面时的XMLHttp返回的是utf-8编码,这就造成了显示产生乱码. 有一种解决办法就是使用encodeURIComponent加上修改 Content-Type 为 application/x-www-form-urlencoded" 来把数据统一编码成 url 格式,当然,也可以指定编码,如:"application/x-www-form-urlencod

servlet中文数据存入数据库为乱码的解决办法

今天在测试从web端存入数据到数据库,结果存入数据库的中文数据出现乱码.当然读取出来的时候也是乱码 乱码的原因是tomcat的内部编码格式iso8859-1导致.  而在每个jsp页面设置的utf-8仅仅是该页面显示是用utf-8,而你用form表单提交的数据仍然是iso8859-1.所以要在接受form表单数据的servlet页面加上一行代码request.setCharacterEncoding("utf-8"). 为了避免每页都要写request.setCharacterEnco

ajax中文乱码多种解决办法

因为XMLHttp在处理返回的responstText的时候把responstBody按UTF-8编码进行解码的,如果服务器端送出的数据流的确是UTF-8编码,那么中文字就会正确显示,但如果是GBK或是其他编码则会出现上述情况. AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open("get|post",url,true)),服务器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,

Request.QueryString的用法(取不到值/中文乱码)解决办法

取不到值解决办法 天做新的ppc weather服务器的时候竟然碰到QueryString取不到值的问题 查了下网上,应该是编码的问题,tq121用的是utf-8,而我希望用gb2132输入~ 因此,改一下~哈哈 打开web.config把 <!-- <globalization requestEncoding="utf-8" responseEncoding="utf-8" />   改成 <globalization requestEnc

php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法_php技巧

最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的.最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在.   1.使用 PEAR 的 Mail 类 PEAR 的 Mail 类可以让你选择使用 sendmail 或者 SMTP 方式发信,这样的包装好的接口很好用,你没有必要去自己重新发明轮子. 2.关于headers 中subject 的乱码 不要把任何除了 iso-8859-1 编码之外的