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速度快类库
Mar 31 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
PHP比你想象的好得多
Nov 27 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
php提高网站效率的技巧
Sep 29 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
微信支付开发告警通知实例
Jul 12 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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版(1)
2006/10/09 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
第四章 php数学运算
2011/12/30 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
javascript 节点排序 2
2011/01/31 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
python3 shelve模块的详解
2017/07/08 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
自荐信格式范文
2013/10/07 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python