PHP PDO 連接 MSSQL 資料庫遇見過的問題

很高興,在 PHP 的學習過程中可以學到 PDO 的技巧。

根據書本中的範例,逐一建置 MySQL 的資料庫,並引入相關參考數據到資料表中;可以正常抓取到資料並顯示出來,這其中當然也包含有中文字。
[補充說明一下,範例中的資料庫字碼的設定及抓資料的程式碼存檔,都是以 UTF-8 處理。]

<?php
try
{
    // 設定 MySQL 資料庫的 DSN
    $dsn = 'mysql:host=localhost;dbname=ch18;';
    $user = 'daniel';
    $password = '123456';
    // 建立 PDO 物件
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 設定 MySQL 資料庫的字元編碼
    $pdo->query('set character set utf8');

可能是試做很順利,所以就想到是不是也可以抓取現有使用的MSSQL資料庫?
於是,就改寫原本的程式碼:

首先,
先入有關 HTML 的相關標籤,在 <?php … ?> 之前,並在 ?> 之後,補入 </body></html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IEDB01-iepa00h</title>
</head>
<body>

再來是修改讀取 MSSQL 的相關設定

// 設定 MSSQL 資料庫的 DSN
$dsn = 'mssql:host=localhost;dbname=DB01;';
$user = 'sa';
$password = 'DB20120604';

// 建立 PDO 物件
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

並將 設定 MySQL 資籿庫的字元編碼指令加以關閉 (對於 MSSQL 該指令無效 !!)

// 設定 資料庫的字元編碼
//$pdo->query('set character set utf8');

此時,心想這樣應該一切順利了。不料,程式可以運行,但果結並確不符理想。
image 

怎會這樣 ?? 後來想到,MSSQL Server 當時建置的時候,是選定 Chinese_Taiwan_Stroke & Binary,會不會和內碼有關?
所以,就修正的 HTML 的字碼值

<meta http-equiv="Content-Type" content="text/html; charset=big5" />
image

沒有留言: