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 相关文章推荐
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
php 读取shell管道传输过来的内容
Mar 01 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
利用php获取服务器时间的实现代码
Jun 07 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
Yii核心验证器api详解
Nov 23 PHP
一个实用的php验证码类
Jul 06 PHP
php微信公众号开发之秒杀
Oct 20 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 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
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
js随机生成一个验证码
2017/06/01 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python类的实例化问题解决
2019/08/31 Python
一个入门级python爬虫教程详解
2021/01/27 Python
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
物业管理应届生求职信
2013/10/28 职场文书
党性分析自查总结
2014/10/14 职场文书
证婚人致辞精选
2015/07/28 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL