You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.4使用sqlsrv查询MS SQL Server遇特殊字符中断返回行问题

修复方案

你遇到的中断问题本质是sqlsrv扩展字符集配置和数据库存储编码不匹配,多字节特殊字符(如示例中的°)解析失败触发fetch逻辑终止,可按以下顺序排查修复:

  • 第一步:数据库连接参数强制指定UTF-8编码,90%以上的同类问题都可以通过该配置解决
    连接时新增CharacterSet参数,示例代码:
    $connectionInfo = array(
        "Database" => "你的数据库名",
        "UID" => "数据库账号",
        "PWD" => "数据库密码",
        "CharacterSet" => "UTF-8"
    );
    $connms = sqlsrv_connect($serverName, $connectionInfo);
    
    注意该参数值大小写敏感,必须写为UTF-8,不能写成utf8或者其他格式。
  • 第二步:添加查询阶段错误检测,定位具体报错环节
    分别在查询执行、fetch循环阶段增加错误打印逻辑,确认是查询执行报错还是读取阶段报错:
    // 查询执行后加错误检测
    $getResults = sqlsrv_query($connms, $tsql);
    if ($getResults === false) {
        print_r(sqlsrv_errors(), true);
        exit;
    }
    // fetch循环内加错误检测
    while ($row = sqlsrv_fetch_array($getResults, SQLSRV_FETCH_ASSOC)) {
        if ($row === false) {
            print_r(sqlsrv_errors(), true);
            exit;
        }
        // 原有业务逻辑
    }
    
  • 第三步:调整数据库字段存储类型
    确认description字段为nvarchar/ntext等支持Unicode的类型,若为普通varchar类型,非ASCII字符存储时就可能出现损坏,触发读取阶段异常。
  • 第四步:临时兼容方案(不推荐长期使用)
    如果无法修改数据库连接配置,可以在读取到字段后手动转码,根据数据库实际存储编码调整源编码参数即可:
    $description = mb_convert_encoding($row['description'], 'UTF-8', 'ISO-8859-1');
    

内容的提问来源于stack exchange,提问作者RickV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:06:03