当前位置: 首页 > news >正文

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

问题就出现在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错

一、问题:

数据库是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 arraymerge 去重,PHP数组合并+与array_merge的区别分析 对多个数组合并去重技巧...
  • oracle多个实例查看,oracle一个实例多个数据库-oracle显示所有数据库-oracle数据库基本介绍...
  • oracle gc 部署,生产环境 CPU 高,定位发现是 oracle jdk7.79 的 GC 导致,只是很奇怪是 SYS 高, USR 不高...
  • oracle null 赋值,java和oracle 中NULL的使用
  • lisp如何调用linux头文件,用lisp开发博客客户端
  • linux 查看服务器任务,细说linux学习--服务器系统查看以及定时任务
  • linux隔离内核使用某些CPU,isolcpu参数 隔离cpu使其不被自动调度(linux 修改boot参数)...
  • linux路径信息,linux 底层 基础命令 路径信息
  • Linux基础信息,Linux基础(用户信息)
  • 在linux下安装mongo数据库,Linux系统下安装MongoDB
  • linux5编辑文本,linux 学习5 文本编辑器 vim
  • c语言数字类型转字符类型,C语言的基本数据类型及数据类型转换
  • 李含光c语言程序设计教程百度云,C语言程序设计教程 李含光 郑关胜 清华大学出版社习题答案...
  • 个人密码管理程序c语言,密码管理系统C语言(8页)-原创力文档
  • c语言程序设计数字电位器,可编程数字电位器在AVR单片机中的应用
  • ES6指北【2】—— 箭头函数
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Mocha测试初探
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • React as a UI Runtime(五、列表)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • springMvc学习笔记(2)
  • 分享一份非常强势的Android面试题
  • 给Prometheus造假数据的方法
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端性能优化--懒加载和预加载
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 强力优化Rancher k8s中国区的使用体验
  • 如何使用 JavaScript 解析 URL
  • 使用 @font-face
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 责任链模式的两种实现
  • 智能合约Solidity教程-事件和日志(一)
  • ​批处理文件中的errorlevel用法
  • #13 yum、编译安装与sed命令的使用
  • #define 用法
  • $.ajax()方法详解
  • (09)Hive——CTE 公共表达式
  • (12)Hive调优——count distinct去重优化
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (五)网络优化与超参数选择--九五小庞
  • (转)JAVA中的堆栈
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Family_物联网
  • .htaccess配置常用技巧
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 依赖注入的基本用发
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .Net多线程总结