php mssql扩展SQL查询中文字段名解决方法


Posted in PHP onOctober 15, 2012

一、问题:

数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名)。其实操作就是对SQLServer查询记录,插入到MySQL里。选择的脚本语言是PHP,PHP打开MSSQL和MySQL扩展,对这两个数据库操作都是很容易的问题。
问题就出现在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错。
上网查了资料,网上相关的信息不太多,很多网友都认为是PHP的MSSQL扩展不支持SQL语句中有中文。查了一下资料,PHP的MSSQL是支持SQL中有中文的语句。出现报错问题大多是因为编码的问题,编码数据库和编码与查询语句编码不统一,查询语句到SQLServer里中文部分就成了乱码,造成查询失败。

二、解决方法:

知道了原因,接下来分析解决,确认是编码不统一的问题。解决分以下几步:
1、确认SQLServer 数据库的编码,我的数据编码是GBK。
2、确认当前PHP脚本文件的编码,我的编码是UTF-8。
3、转换SQL查询语句的的编码。
补充:有的网友提到要把PHP的脚本文件编码转成和数据库编码一致,其实这一步大可不必,只要确认你的SQL语句和数据库的编码一致就可以,这里建议不必转换的原因是如果你的PHP脚本文件里包含其它PHP脚本,那也得对所有include或require的脚本文件编码转换,不然PHP脚本编码不统一很容易出错,若互相关联的文件很多,这也是一件很麻烦的问题而且把事情复杂化了。

三、方案:

写一个转换函数,在把SQL操作前把SQL语句编码转换。下面贴出我的范例代码:

//编码转换函数 
function utf8togb($s) { 
return iconv('utf-8', 'gbk//IGNORE', $s); // IGNORE 参数是遇到不成转换的字符时忽略 
} 
//建议把所有中文字段用英文别名替换,方便下面操作还有编码转换等问题 
$sql="SELECT [id], [栏目] as typeid, [正题] as title, [作者] as author, convert(text, [正文]) as body FROM [文章表];"; 
$sql = utf8togb($sql);
PHP 相关文章推荐
DedeCms模板安装/制作概述
Mar 11 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
PHP实现简单计算器小程序
Aug 28 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 PHP
PHP获取文件后缀名的三个函数
Oct 15 #PHP
php标签云的实现代码
Oct 10 #PHP
域名和cookie问题(域名后缀)
Oct 10 #PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 #PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 #PHP
php排序算法(冒泡排序,快速排序)
Oct 09 #PHP
php全排列递归算法代码
Oct 09 #PHP
You might like
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
PHP微信支付实例解析
2016/07/22 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jquery CSS选择器笔记
2010/03/29 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
canvas时钟效果
2017/02/16 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
Python中整数的缓存机制讲解
2019/02/16 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
运动会表扬稿大全
2014/01/16 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫
Python学习之时间包使用教程详解
2022/03/21 Python
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL