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的FTP学习(四)
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 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 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
PHP Class&Object -- 解析PHP实现二叉树
2013/06/25 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
js解决movebox移动问题
2016/03/29 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
Python设置默认编码为utf8的方法
2016/07/01 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
如何用Python合并lmdb文件
2018/07/02 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Pytorch to(device)用法
2020/01/08 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python GUI模拟实现计算器
2020/06/22 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python实现数字的格式化输出
2020/08/01 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
《第一朵杏花》教学反思
2014/04/16 职场文书
3分钟演讲稿
2014/04/30 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2015年工会工作总结
2015/03/30 职场文书
毕业论文致谢范文
2015/05/14 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL