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


Posted in PHP onJuly 19, 2012

今天使用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语句成功,并且数据库里保存的中文没有乱码。

PHP 相关文章推荐
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
php获取访问者IP地址汇总
Apr 24 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
PHP递归算法的简单实例
Feb 28 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 #PHP
PHP的5个安全措施小结
Jul 17 #PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 #PHP
UCenter 批量添加用户的php代码
Jul 17 #PHP
一个简单的网页密码登陆php代码
Jul 17 #PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 #PHP
php生成静态文件的多种方法分享
Jul 17 #PHP
You might like
php数组去重复数据示例
2014/02/25 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
jquery实现图片预加载
2015/12/25 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
EsLint入门学习教程
2017/02/17 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
化学实验员岗位职责
2013/12/28 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
研讨会主持词
2014/04/02 职场文书
就业协议书样本
2014/08/20 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
中学图书馆工作总结
2015/08/11 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL