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+oracle 分页类
Oct 09 PHP
一个php作的文本留言本的例子(三)
Oct 09 PHP
PHP脚本的10个技巧(5)
Oct 09 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
珊瑚虫IP库浅析
Feb 15 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
Yii框架页面渲染操作实例详解
Jul 19 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 如何向 MySQL 发送数据
2006/10/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
利用php绘制饼状图的实现代码
2013/06/07 PHP
php GUID生成函数和类
2014/03/10 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
js实现简单计算器
2015/11/22 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python实现去除代码前行号的方法
2015/03/10 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python中的推导式使用详解
2015/06/03 Python
Django如何配置mysql数据库
2018/05/04 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
工地宣传标语
2014/06/18 职场文书
春节晚会开场白
2015/05/29 职场文书
集结号观后感
2015/06/08 职场文书
初中政治教学反思
2016/02/23 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android