php MsSql server时遇到的中文编码问题

但导到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 也没有设置内码页的地方。

(0)

相关推荐

  • PHP中文编码小技巧

    PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码,中国的 GB2312-80,日本的 JIS 等.作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage

  • 解析php开发中的中文编码问题

    PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等.作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepag

  • php中json_encode中文编码问题分析

    例如:'胥'经过json_encode处理后变为'\u80e5',最终的json中中文部分被替换为unicode编码.我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的. 我的解决方法:先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文! 测试代码如下: 复

  • php和mysql中uft-8中文编码乱码的几种解决办法

    PHP页面转UTF-8编码问题 1.在代码开始出加入一行: 复制代码 代码如下: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题 点击编辑器的菜单:"文件"->"另存为",可以看到当前文件的编码,确保文件编码为:UTF-8, 如果是ANSI,需要将编码改成:UTF-8. 3.PHP文件头BOM问题: PHP文件一定不可以有BOM标签 否则,会出现session不能使用

  • php MsSql server时遇到的中文编码问题

    但导到sqlserver 2005后,发现其中文编码只支持GB 和 UCS-2(unicode 16),所以直接在数据库中查询显示正确,但使用php的utf9编码显示时则全是乱码.找了大量资料,什么使用mssql,freetds,odbc,ado或直接每次查询和写入都进行转码等建议都有.不过实际测试中,发现Ado这种方法是好用的. 代码如下: 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type"

  • MSSQL SERVER 2005 数学函数整理

    MSSQL SERVER 2005 数学函数 1.求绝对值 ABS() select FWeight-50,ABS(FWeight-50),ABS(-5.38) from T_Person 2.求幂 POWER(X,Y) 用来计算X的Y次幂 select FWeight,POWER(FWeight,-0.5),POWER(FWeight,2), POWER(FWeight,3),POWER(FWeight,4) from T_Person select Power(2,2) 3.求平方根 SQR

  • mssql server 数据库附加不上解决办法分享

    错误15105,从网上找了一些解决方案,一般都是说文件的权限不足的问题, 当然附加的时候必须是有数据库附加权限才可以操作的. 解决办法1:给相应的MDF文件给Full Control的权限,如果不知道是什么用户可以去Sql Server的配置中心去找 但是我遇到这个用上述方法就不可以. 解决方法2:换个用户试试,我原数据库是用sa登陆的,我试着用sa登陆一下,附加成功了!~ 如果反复的用sa登陆却登陆失败,可能是没有开权限. 权限可以在登陆用户的选项中设置,允许登陆即可. 验证模式则可以在服务器

  • php使用pdo连接mssql server数据库实例

    本文实例讲述了利用php的pdo来连接微软的mssql server数据库的方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: $dsn = 'mssql:dbname=bookStore_demo;host=192.168.1.106'; $user = 'sa'; $password = '123';     //mssql_connect('192.168.1.106','sa','123');     //echo 22; try {        // echo 11

  • Tomcat5+Mssql server 2000数据库连接池配置之旅

    Tomcat相信大家已经很熟悉了,作为一种免费而强大的java web server,得到了很多java爱好者的青睐,最新版本的tomcat5支持servlet2.4和jsp2.0,今天我将采用Tomcat5和Ms sqlserver 000一起来开始数据库连接池配置之旅.需要的准备1.jdk 我使用的版本1.4.012.Tomcat 5 我使用的是5.0.16版本 下载地址:http://jakarta.apache.org/site/binindex.cgi3.Mssql server 20

  • Eclipse添加新server时无法选择Tomcat7的解决方法

    在Eclipse中创建了一个Web工程后,需要将该工程部署到Tomcat中进行发布.有时就会遇到在New Server对话框中选择了Tomcat 6/7后却无法单击"Next"按钮的问题,如下图所示: 这时打开工程目录下的.metadata\.plugins\org.eclipse.core.runtime\.settings文件夹, 删除  org.eclipse.wst.server.core.prefs   和   org.eclipse.jst.server.tomcat.co

  • 关于C#连接SQL Server时提示用户登录失败的解决方法

    在用C#开发windows端程序并连接SQL Server时有可能会遇到数据库登录失败的问题,报错现象如下图所示: 报错信息如下: System.Data.SqlClient.SqlException: '用户 '' 登录失败.' This exception was originally thrown at this call stack:     [External Code]     MyQQ.DataOperator.ExecSQL(string) in DataOperator.cs

  • MSSQL Server 查询优化方法 整理

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有 创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7. 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必 要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1. 把数据.日志.索引放到不同

  • php连接MSsql server的五种方法总结

    参考php手册,对php连接sql server系列做出个小结.主要有五种方式: 一.通过mssql_系列函数 mssql_系列函数主要针对php5.3以下的版本和sqlserver2000及以上版本使用. 在php.ini中将;extension=php_mssql.dll;extension=php_msql.dll;extension=php_pdo_mssql.dll ;extension=php_pdo_odbc.dll 前面的分号去掉. <?php $server ="loca

  • 将MSSQL Server 导入/导出到远程服务器教程的图文方法分享

    1.打开本地企业管理器,先创建一个SQL Server注册来远程连接服务器端口SQL Server.步骤如下图: 图1: 2.弹出窗口后输入内容."总是提示输入登陆名和密码"可选可不选,如图2. 图2: 3.注册好服务器后,点击打开.如果是选择了"总是提示输入登陆名和密码"的话再点了确定后会提示输入用户密码,如图3. 图3: 4.进入后,选择到您的数据库,如testdb.在上面点右键,"所有任务">>"导入数据",

随机推荐