2015-02-07 36 views
2

我在Linux服務器(PHP)和SQL Server數據庫的大網站上工作。 SQL Server數據庫使用排序規則SQL_Latin1_General_CP1_CI_AS將丹麥語字母存儲在SQL Server數據庫中的最佳方法是什麼?

我有一個表格(我們稱之爲table1),它存儲了大量通過PHP腳本(script1)從nominatim中選擇並存儲在table1中的地址。它看起來像地址的格式是HTML。從table1中選擇的丹麥字母(æøå)在網站上顯示效果很好。

但是,我製作了一個PHP腳本(script2),用於選擇這些地址並將它們轉儲到同一MS SQL Server上的另一個表(table2)中(仍排序爲SQL_Latin1_General_CP1_CI_AS)。但是從table2中選擇丹麥字母看起來很奇怪。當script1從nominatim獲取地址時,它是JSON格式,之後被解碼。

$addressdetails = json_decode ($addressdetails, true); 

這裏沒有其他的編碼或解碼。

以下可能也是一種幫助。當我運行phpinfo()我可以看到服務器具有以下設置:

PHP version 5.3.3 
content type: text/html; charset=UTF-8 

什麼是處理在PHP和SQL Server,那麼丹麥和其他特殊字符的字母最好的方式顯示在任何平臺上正確的方法是什麼?

+0

如果您遇到Latin1數據庫字符集,請使用HTML實體? – halfer 2015-02-07 08:58:09

+0

嗯,問題可能是PHP'json_'函數需要UTF-8,所以你需要在字符集之間進行轉換,或者避免使用這些函數。 – halfer 2015-02-07 09:02:30

回答

1

像table1這樣的聲音在NVARCHAR類型列中有地址數據,而table2在VARCHAR類型列中有地址數據。 NVARCHAR會很樂意處理,但VARCHAR和SQL_Latin1_General_CP1_CI_AS排序規則不會。

如果兩個表使用NVARCHAR存儲數據然後檢查它沒有得到在Table 1和Table之間的任何點轉換爲VARCHAR ,例如,一個VARCHAR存儲過程參數。

+0

鑑於O.P.只說「丹麥字母看起來很奇怪」,而不是專門以「?」的形式出現,所以不確定這個問題是否屬於「VARCHAR」。它應該與使用UTF-16 Little Endian的SQL Server和使用UTF-8的PHP有關。很可能這是一個'VARCHAR'問題,我們只是不能排除別的東西,沒有來自O.P的更多信息。仍然是+1,因爲這裏的所有內容都是準確的。 – 2015-09-26 20:56:24

相關問題