PHP连接SQL Server 2008 - 如何使用odbc_connect设置utf-8

DeL*_*eLe 8 php sql sql-server utf-8

我用ODBC连接sql server 2008就好

$virtual_dsn = 'DRIVER={SQL Server};SERVER=MyServerName;DATABASE=myDatabase';
$conn = odbc_connect($virtual_dsn,'sa','mypass') or die('ODBC Error:: '.odbc_error().' :: '.odbc_errormsg().' :: '.$virtual_dsn);

if (!$conn){
    if (phpversion() < '4.0'){
      exit("Connection Failed: . $php_errormsg" );
    }
    else{
      exit("Connection Failed:" . odbc_errormsg() );
    }
}

// This query generates a result set with one record in it.
$sql="SELECT TOP 10 * FROM Mytable";

# Execute the statement.
$rs=odbc_exec($conn,$sql);

// Fetch and display the result set value.
if (!$rs){
    exit("Error in SQL");
}
while (odbc_fetch_row($rs)){


    $col1=odbc_result($rs, "name");
    echo "$col1 <br>";

}

// Disconnect the database from the database handle.
odbc_close($conn);
Run Code Online (Sandbox Code Playgroud)

但我得到的文字不正确

b??o c??o vi?c s? d?ng

我尝试使用odbc_exec($conn, "SET names utf8"); 但得到错误

 Warning: odbc_exec(): SQL error: [Microsoft][SQL Server Native Client 10.0][SQL Server]'names' is not a recognized SET option., SQL state 37000 in SQLExecDirect in C:\xampp\htdocs\sql\index.php on line 32
Run Code Online (Sandbox Code Playgroud)

如何使用odbc_connect设置utf-8谢谢

Nés*_*tor 3

odbc_exec不接受“SET NAMES utf8”作为第二个参数。第二个参数必须是查询。

为变量设置 utf8使用utf8_decodeiconv

$col1=utf8_decode(odbc_result($rs, "name"));
Run Code Online (Sandbox Code Playgroud)

或者

$col1=odbc_result($rs, "name");
iconv("UTF-8", "CP1252", $col1);
Run Code Online (Sandbox Code Playgroud)

警告:odbc_exec():SQL 错误:[Microsoft][SQL Server Native Client 10.0][SQL Server]'names' 不是可识别的 SET 选项。,C:\xampp\htdocs\sql\index 中 SQLExecDirect 中的 SQL 状态 37000 .php 第 32 行

这不是错误,而是警告。但请检查odbc_exec手册以确保全部。