PHP windows下ODBC函数乱码解决方法

一、原因

我在php中使用odbc连接mssql server时,在列名为英文,返回数据也为英文时一切正常。

但如果列名出现中文,会提示SQL state 07001参数缺少或者SQL state 37000错误。如果返回数据中存在中文则为乱码。

这一情况实际上正是编码的问题。
在windows下对不支持unicode utf-8编码的程序,会默认使用GBK编码,而实际上ODBC在php实现内貌似是不支持utf-8的,因为utf-8编码的字符串提交给ODBC无法执行。

因此解决方案就很明了了,直接修改字符串编码转码为GBK,或者设置windows非unicode编码(设置->时间和语言->语言->管理语言设置->更改系统区域设置->勾选使用UTF-8提供全球语言支持 重启即可)

解决方法 一:

在Windows odbc_connect(和PDO odbc)下,odbc显然使用Windows区域设置来处理来自MS access和MS SQL Server数据库的输入和输出。

如果使用的不是ASCII字符,这会导致很多麻烦。

utf8_encode和mb_convert等变通解决方案都失败了。

我的解决方案是对Windows执行以下更改

控制面板>区域>管理>更改系统区域设置>选中“使用Unicode UTF-8获得全球语言支持”</i> “是的

解决方法 二:

使用iconv()转码后处理插入的信息和查询的结果

$sql="select * from session where sess_id='中国'";
$sql=iconv('UTF-8', 'GBK', $sql);

解决方法 三:

修改work space编码集,改成默认GBK,非UTF-8,

工具是eclipse php路径是

windows-》preferences-》workspace
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值