2015-09-07 76 views
2

我有一個包含教師姓名的表格。有些名字像René Visser有特殊字符。當我編寫用於顯示名稱的SQL查詢時,特殊字符被替換爲符號。 我試過cast(),但它工作不正常。我的查詢是這樣的。在php頁面中顯示來自表格的特殊字符

$qry = mssql_query("SELECT CAST(FirstName_1 AS NVARCHAR(250)) AS Name FROM 
    tbl_teachers"); 

FirstName_1列是nvarchar類型。我曾嘗試將FirstName_1投射到VARBINARY(8000),然後像下面那樣將結果投射到IMAGE。

CAST(CAST(FirstName_1 AS VARBINARY(8000)) AS IMAGE) AS Name. 
+0

也許您的SQL提供程序/驅動程序不知道如何使用unicode。請參閱[小提琴](http://sqlfiddle.com/#!6/83d9a/1/0) – lad2025

+0

@ lad2025如何使SQL提供程序啓用這些unicodes – Techy

+0

[UTF-8可能一直貫穿](https://stackoverflow.com/questions/279170/utf-8-all通過) – mickmackusa

回答

1

您將需要指定字符集,或者如果您已經將其設置爲Windows-1252。很可能您的頁面正在使用UTF-8編碼讀取數據。這解釋了什麼?符號。

<head> 
    <meta charset="Windows-1252"> 
</head> 
+0

它不工作@ John Bell – Techy

3

您應該爲SQL服務器使用UTF-8編碼。

然後,確保你從PHP使用發送編碼頭也:

header('Content-Type: text/html; charset=utf-8');

+0

或者將頁面編碼設置爲Windows-1252。 SQL Server的默認值。 –

+0

它不工作的兄弟@cosmin – Techy

+0

charset的響應頭是否接收到bro @Techy? – Cosmin

1

你最有可能有一個字符集問題。你的查詢與此無關,你不需要投它。

你需要設置連接時,PHP和HTML頭和爲相同字符集文檔本身的字符集。 UTF-8很可能會涵蓋您所需要的所有特殊字符。

以下是你可以做的一些事情。 header('Content-Type: text/html; charset=utf-8');(已到之前的任何和所有的輸出被稱爲):

  • ini_set('mssql.charset', 'UTF-8');
  • 設置PHP和HTML標題爲UTF-8
    • PHP(在連接到你的數據庫有此運行)
    • HTML:<meta charset="utf-8">(必須是<head> -tag
  • 保存在內部UTF-8編碼文檔予。 F你會在記事本做++,它是格式 - >轉換爲UFT-8(你也可以選擇UTF-8 W/O BOM)
  • 數據庫本身,它的表,可能需要被設置爲UTF-8。這可以用下面的查詢來完成(只需要運行一次):

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

請記住,你的應用程序的所有部分已被設置爲相同類型的字符集,或你會在數據庫中體驗到這些東西。