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做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
php zend 相对路径问题
Jan 12 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
基于PHP文件操作的详解
Jun 05 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
php实现的一段简单概率相关代码
May 30 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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学习之运算符相关概念
2011/06/09 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
js 单引号 传递方法
2009/06/22 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
详解Python中dict与set的使用
2015/08/10 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Python unittest模块用法实例分析
2018/05/25 Python
python多进程实现文件下载传输功能
2018/07/28 Python
用Python shell简化开发
2018/08/08 Python
Python with语句和过程抽取思想
2019/12/23 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
简短大学毕业感言
2014/01/18 职场文书
献爱心倡议书
2014/04/14 职场文书
迎国庆演讲稿
2014/09/15 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python