正确配置PHP连接MSSQL并支持UTF-8需:1. 使用sqlsrv扩展并启用extension=php_sqlsrv_80.dll;2. 连接时设置"CharacterSet"=>"UTF-8";3. 数据库字段使用nvarchar等Unicode类型;4. 排序规则支持UTF8;5. 页面输出header("Content-Type: text/html; charset=utf-8")且文件保存为UTF-8无BOM。

PHP连接MSSQL并支持UTF-8编码,关键在于正确配置数据库连接驱动、设置字符集以及确保数据传输全过程使用统一的UTF-8编码。尤其在处理中文或其他多字节字符时,编码不一致会导致乱码问题。
选择合适的MSSQL连接扩展
PHP连接MSSQL推荐使用微软官方提供的 sqlsrv 扩展或 PDO_SQLSRV,它们对UTF-8的支持更完善,比老旧的mssql扩展更稳定。
- 确认php.ini中已启用 sqlsrv 扩展,例如:extension=php_sqlsrv_80.dll(根据PHP版本选择对应驱动)
- 下载驱动:从微软官网获取适用于PHP版本的 Microsoft Drivers for PHP for SQL Server
设置连接选项中的字符编码
在建立连接时,明确指定使用 UTF-8 编码可以避免大多数乱码问题。
使用 sqlsrv_connect 时,通过连接选项设置:
立即学习“PHP免费学习笔记(深入)”;
$server = "localhost";
$connectionOptions = array(
"Database" => "your_database",
"Uid" => "your_username",
"PWD" => "your_password",
"CharacterSet" => "UTF-8"
);
$conn = sqlsrv_connect($server, $connectionOptions);
if (!$conn) {
die(print_r(sqlsrv_errors(), true));
}
注意:"CharacterSet" => "UTF-8" 是关键参数,确保客户端与服务器间以UTF-8通信。
确保数据库和字段本身支持UTF-8
即使PHP连接设置了UTF-8,若数据库表字段使用非Unicode类型(如 varchar 而不是 nvarchar),仍可能导致存储异常。
- 建议使用 nvarchar、nchar、ntext 等支持Unicode的数据类型
- 数据库排序规则(Collation)应包含 UTF8 或以 _SC、_UTF8 结尾,如:SQL_Latin1_General_CP1_CI_AS_UTF8
页面与输出也需统一编码
PHP脚本输出到浏览器时,也要声明UTF-8,防止前端显示乱码。
header("Content-Type: text/html; charset=utf-8");
同时确保HTML文件本身保存为UTF-8无BOM格式。
基本上就这些。只要连接驱动支持、连接参数明确设置、数据库字段类型合理、前后端编码统一,PHP操作MSSQL完全可稳定支持UTF-8。不复杂但容易忽略细节。










