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+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
Laravel 5框架学习之环境与配置
Apr 08 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
分享php多功能图片处理类
May 15 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 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
smarty半小时快速上手入门教程
2014/10/27 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
家长学校实施方案
2014/03/15 职场文书
美食节目策划方案
2014/05/31 职场文书
总经理任命书范本
2014/06/05 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
收款授权委托书
2014/10/02 职场文书
中小学生学籍证明
2014/10/25 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android