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 相关文章推荐
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 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
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
Javascript之String对象详解
2016/06/08 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
解决python 找不到module的问题
2020/02/12 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
公司办公室岗位职责
2014/03/19 职场文书
服务明星事迹材料
2014/12/29 职场文书
创业计划书介绍
2019/04/24 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python