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通用检测函数集合
Feb 08 PHP
PHP 验证码的实现代码
Jul 17 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 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程序员编程注意事项
2008/04/10 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
js 走马灯简单实例
2013/11/21 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 常用的基础函数
2018/07/10 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python实现宿舍管理系统
2019/11/22 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
python中使用np.delete()的实例方法
2021/02/01 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
后勤采购员岗位职责
2013/12/19 职场文书
员工薪酬福利制度
2014/01/17 职场文书
校园安全检查制度
2014/02/03 职场文书
迎新晚会策划方案
2014/06/13 职场文书
避暑山庄导游词
2015/02/04 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
Python加密技术之RSA加密解密的实现
2022/04/08 Python