php MsSql server时遇到的中文编码问题


Posted in PHP onJune 11, 2009

但导到sqlserver 2005后,发现其中文编码只支持GB 和 UCS-2(unicode 16),所以直接在数据库中查询显示正确,但使用php的utf9编码显示时则全是乱码。
找了大量资料,什么使用mssql,freetds,odbc,ado或直接每次查询和写入都进行转码等建议都有。不过实际测试中,发现Ado这种方法是好用的。
代码如下:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<?php 
//print("The next line generates an error.<br>"); 
//printaline("PLEASE?"); 
//print("This will not be displayed due to the above error."); 
?> <?php 
$conn = new COM("ADODB.Connection", NULL, CP_UTF8) or die("Cannot start ADO"); 
//access 数据库的打开方式 
//$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db"); 
//$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db"); 
$conn->Open("Driver={SQL Server};Server={192.168.22.40};Database=sugarcrm_db;UID=sa;PWD=123456;") ; 
// 执行查询并输出数据 
$rs = $conn->Execute('SELECT * FROM accounts') or die ("error query"); 
?> 
<table border="1"> 
<tr><th>ID</th><th>Title</th> 
</tr> 
<?php 
while (!$rs->EOF) { 
echo '<tr>'; 
echo '<td>'. $rs->Fields['id']->Value .'</td>'; 
echo '<td>'. $rs->Fields['name']->Value .'</td>'; 
echo '</tr>'; 
$rs->MoveNext(); 
} 
?> 
</table> 
<?php 
// 释放资源 
$rs->Close(); 
$conn->Close(); 
$rs = null; 
$conn = null; 
?> 
</body> 
</html>

查询结果(与使用sql server managment studio效果一样):
ID Title
114b0775-d9b2-db90-fcda-4a2f2cd7cdbd ???浼?绀炬???ュ??浜? 629487
1d270085-a588-9ea7-584c-4a2f2c8d1a5b Fabriqu茅 Interation氓l 79436
23 中文
36ea2575-fe34-61b0-e5ae-4a2f2c791d22 Berufskolleg f眉r Elektrotechnik 65790
3834261a-fd48-9d4a-be40-4a2f2c5fc256 Berufskolleg f眉r Elektrotechnik 529523
52c9652c-82c8-ec2b-72ae-4a2f2c3a58d6 ???浼?绀炬???ュ??浜? 42138
78931a0e-f582-f406-8a56-4a2f2c3741b0 But茅e Torique 700010
989473f7-6b7b-fed3-12a1-4a2f2c320645 A.B.?便?€?????ゃ?炽??181212
b4579151-55cb-5ae4-a5f1-4a2f2c173b18 B眉nde-Mitte 203765
d72c42c9-9e1d-b926-d931-4a2f2c2a3100 Berufskolleg f眉r Elektrotechnik 27682
e97002f1-035f-91d3-4592-4a2f2f780e01 zhh

其中,23 ID的编码是GB2312的,其余是utf-8的。

而使用odbc则跟使用mssql_connect效果一样。

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<?php 
//print("The next line generates an error.<br>"); 
//printaline("PLEASE?"); 
//print("This will not be displayed due to the above error."); 
?> <?php 
//$conn = odbc_pconnect("myodbc", "sa", "cvttdev", 0); 
//$connstr="DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath("mydb.mdb"); 
$connstr="Driver={SQL Server};Server={192.168.22.40};Database=sugarcrm_db;UID=sa;PWD=123456;"; 
$connid=odbc_connect($connstr,"sa","cvttdev",SQL_CUR_USE_ODBC ); 

$query=odbc_do($connid,"select id,name from accounts"); 
?> 
<table border="1"> 
<tr><th>ID</th><th>Title</th> 
</tr> 
<?php 
while(odbc_fetch_row($query)) 
{ echo '<tr>'; 
$name = odbc_result($query,2); 
$id=odbc_result($query,1); 
echo '<td>'. $id .'</td>'; 
echo '<td>'. $name .'</td>'; 
echo '</tr>'; 
} 
?> 
</table>

查询结果:

ID Title
114b0775-d9b2-db90-fcda-4a2f2cd7cdbd 株式会社未来商事 629487
1d270085-a588-9ea7-584c-4a2f2c8d1a5b Fabriqué Interationål 79436
23 ����
36ea2575-fe34-61b0-e5ae-4a2f2c791d22 Berufskolleg für Elektrotechnik 65790
3834261a-fd48-9d4a-be40-4a2f2c5fc256 Berufskolleg für Elektrotechnik 529523
52c9652c-82c8-ec2b-72ae-4a2f2c3a58d6 株式会社未来商事 42138
78931a0e-f582-f406-8a56-4a2f2c3741b0 Butée Torique 700010
989473f7-6b7b-fed3-12a1-4a2f2c320645 A.B.ケアブレイン��?181212
b4579151-55cb-5ae4-a5f1-4a2f2c173b18 Bünde-Mitte 203765
d72c42c9-9e1d-b926-d931-4a2f2c2a3100 Berufskolleg für Elektrotechnik 27682
e97002f1-035f-91d3-4592-4a2f2f780e01 zhh

因为odbc 也没有设置内码页的地方。

PHP 相关文章推荐
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
PHP实现Huffman编码/解码的示例代码
Apr 20 PHP
PHP xpath()函数讲解
Feb 11 PHP
Nginx+php配置文件及原理解析
Dec 09 PHP
php 分页类 扩展代码
Jun 11 #PHP
PHP 输出简单动态WAP页面
Jun 09 #PHP
Windows PHP5和Apache的安装与配置
Jun 08 #PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 #PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 #PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 #PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 #PHP
You might like
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
清空上传控件input file的值
2010/07/03 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
走群众路线学习笔记
2014/11/06 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL