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之第八天
Oct 09 PHP
PHP连接access数据库
Mar 27 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
php define的第二个参数使用方法
Nov 04 PHP
php递归删除目录与文件的方法
Jan 30 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 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读取flv文件的播放时间长度
2009/09/03 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
Js基础学习资料
2010/11/23 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
python多进程实现文件下载传输功能
2018/07/28 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python自定义一个异常类的方法
2019/06/27 Python
详解python内置模块urllib
2020/09/09 Python
python实现自动打卡的示例代码
2020/10/10 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
向领导表决心的话
2014/03/11 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
体育专业求职信
2014/07/16 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL