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 - Html Transfer Code
Oct 09 PHP
也谈截取首页新闻 - 范例
Oct 09 PHP
php include,include_once,require,require_once
Sep 05 PHP
令PHP初学者头疼十四条问题大总结
Nov 12 PHP
PHP正则的Unknown Modifier错误解决方法
Mar 02 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php增删改查示例自己写的demo
Sep 04 PHP
Php-Redis安装测试笔记
Mar 05 PHP
php实现cookie加密的方法
Mar 10 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
PHP实现用户登录的案例代码
May 10 PHP
php创建类并调用的实例方法
Sep 25 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递归函数返回值使用方法
2013/02/18 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
js实现批量删除功能
2020/08/27 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
简单谈谈python中的语句和语法
2017/08/10 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
自荐信范文
2013/12/10 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
优秀经理获奖感言
2014/03/04 职场文书
自动一体化专业求职信
2014/03/15 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android