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 mysql数据库操作分页类
Jun 04 PHP
php与paypal整合方法
Nov 28 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
composer.lock文件的作用
Feb 03 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
Laravel find in set排序实例
Oct 09 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实现图片上传并压缩
2015/12/22 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
PHP实现验证码校验功能
2017/11/16 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
Pandas 同元素多列去重的实例
2018/07/03 Python
python实现动态创建类的方法分析
2019/06/25 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
深入了解python中元类的相关知识
2019/08/29 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
医学院四年学习生活的自我评价
2013/11/06 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
平安建设实施方案
2014/03/19 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏