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 编程安全性小结
Jan 08 PHP
php分页函数完整实例代码
Sep 22 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
php一个解析字符串排列数组的方法
May 12 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
PHP curl使用实例
Jul 02 PHP
PHP缓冲区用法总结
Feb 14 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
php微信开发接入
Aug 27 PHP
PHP获取类私有属性的3种方法
Sep 10 PHP
PHP命令行与定时任务
Apr 01 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 session_start()出错原因分析及解决方法
2013/10/28 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
ES6入门教程之Array.from()方法
2019/03/23 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
Python提取网页中超链接的方法
2016/09/18 Python
Python实现端口检测的方法
2018/07/24 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
人力资源管理专业学生自我评价
2013/11/20 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers