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 相关文章推荐
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
PHP常用编译参数中文说明
Sep 27 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php 删除cookie方法详解
Dec 01 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 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 文件上传模型,支持多文件上传
2009/08/13 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
jquery禁用右键示例
2014/04/28 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python绘制双柱形图代码实例
2017/12/14 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python psutil监控进程实例
2019/12/17 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python dict如何定义
2020/09/02 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
九年级政治教学反思
2014/02/06 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2015年班组长工作总结
2015/04/10 职场文书
员工给公司的建议书
2019/06/24 职场文书