簡體   English   中英

SQL Server 2008數據庫+ PHP中的UTF-8

[英]UTF-8 in SQL Server 2008 Database + PHP

我想在MS SQL 2008數據庫中使用PHP存儲數據。

我遇到像äöüß這樣的字母有問題,它們在數據庫中顯示不正確,當我在網站上顯示時。

當我對輸入數據進行utf8_encode和使用PHP輸出數據時的utf8_decode時,它可以正常工作。

還有其他更簡單的方法來解決這個問題嗎?

我已經解決了一次,問題是PHP的mssql驅動程序壞了(無法找到bugs.php.net的鏈接,但它就在那里)並且當涉及nchar和nvarchar fieldsa和utf8時失敗。 您需要稍微轉換數據和查詢:

SELECT some_nvarchar_field FROM some_table

首先,您需要將輸出更改為二進制 - 這樣它不會被破壞:

SELECT CONVERT(varbinary(MAX), some_nvarchar_field) FROM some_table;

然后在PHP中,您需要將其轉換為UTF-8,在那里您需要iconv擴展名

iconv('UTF-16LE', 'UTF-8', $result['some_nvarchar_field']);

這修復了數據庫中的選擇數據,但是,如果你想實際將一些數據放到數據庫中,或者添加一個WHERE子句,你仍然會收到錯誤,所以WHEREUPDATEINSERT等的修復是通過轉換來實現的。字符串到十六進制形式:
想象一下,你有這個問題:

INSERT INTO some_table (some_nvarchar_field) VALUES ('ŽČŘĚÝÁÖ');

現在,我們必須運行一些PHP:

$value = 'ŽČŘĚÝÁÖ';
$value = iconv('UTF-8', 'UTF-16LE', $value); //convert into native encoding 
$value = bin2hex($value); //convert into hexadecimal
$query = 'INSERT INTO some_table (some_nvarchar_field)  VALUES(CONVERT(nvarchar(MAX), 0x'.$value.'))'; 

查詢變為:

INSERT INTO some_table (some_nvarchar_field) VALUES (CONVERT(nvarchar(MAX), 0x7d010c0158011a01dd00c100d600));

將有效

我已經使用FreeTDS在Linux上使用MS SQL Server 2008測試了這個並且它運行得很好,我有一些大型網站正在運行,沒有任何問題。

我搜索了兩天如何通過PHP將UTF-8數據(從Web表單)插入到MSSQL 2008中。 我到處讀到你不能,你需要先轉換為UCS2(就像cypher的解決方案推薦的那樣)。 在Windows環境中,SQLSRV被認為是一個很好的解決方案,我無法嘗試,因為我在Mac OSX上開發。

但是,FreeTDS手冊(PHP mssql在OSX上使用的內容)說在開頭引號前添加一個字母“N”:

mssql_query("INSERT INTO table (nvarcharField) VALUES (N'űáúőűá球最大的采購批發平台')", +xon);

根據此討論,N字符告訴服務器轉換為Unicode。 https://softwareengineering.stackexchange.com/questions/155859/why-do-we-need-to-put-n-before-strings-in-microsoft-sql-server

我可以通過代碼插入

    $value = $_POST['first_name'];
    $value = iconv("UTF-8","UCS-2LE",$value);
    $value2 = $_POST['last_name'];
    $value2 = iconv("UTF-8","UCS-2LE",$value2);  
    $query = "INSERT INTO tbl_sample(first_name, last_name) VALUES (CONVERT(VARBINARY(MAX), '".$value."') , CONVERT(VARBINARY(MAX), '".$value2."'))"; 

    odbc_exec($connect, $query);

如果我不能搜索

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM