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 02 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
php根据生日计算年龄的方法
Jul 13 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
php cookie 详解使用实例
Nov 03 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
php中yii框架实例用法
Dec 22 PHP
PHP7 新增功能
Mar 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 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
Python实现图片转字符画的示例
2017/08/22 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
详解用python写一个抽奖程序
2019/05/10 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
护理专业推荐信
2013/11/07 职场文书
人力资源经理自我评价
2014/01/04 职场文书
企业宣传方案
2014/03/04 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
如何写早恋检讨书
2014/09/10 职场文书
成都人事代理协议书
2014/10/25 职场文书
三下乡个人总结
2015/03/04 职场文书
礼貌问候语大全
2015/11/10 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python
分享Python异步爬取知乎热榜
2022/04/12 Python