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 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
php跨站攻击实例分析
Oct 28 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
Laravel 验证码认证学习记录小结
Dec 20 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
SONY ICF-F10中波修复记
2021/03/02 无线电
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
vue实现微信分享功能
2018/11/28 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
淘宝活动策划方案
2014/02/06 职场文书
高中学生评语大全
2014/04/25 职场文书
今日说法观后感
2015/06/08 职场文书
2015暑假假期总结
2015/07/13 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏