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

PHP连接SQL Server读取日文列报错:Undefined index: 基準日時

解决PHP读取MS SQL Server日文列名的Undefined Index问题

嘿,我之前在项目里也碰到过类似的非ASCII列名读取问题,给你几个实用的排查和解决方向:

1. 确保连接时的字符集匹配

MS SQL Server和PHP的SQLSRV驱动之间如果字符集不统一,很容易导致日文列名在传输过程中被篡改,进而出现索引未定义的错误。你可以在连接信息里明确指定字符集为UTF-8:

$serverName = "TestDB,1433";
$connectionInfo = array(
    "Database"=>"Database123",
    "UID"=>"sa",
    "PWD"=>"Pass.124",
    "CharacterSet" => "UTF-8" // 新增字符集配置
);
$conn = sqlsrv_connect($serverName, $connectionInfo);

2. 查询时用方括号包裹日文列名

SQL Server对包含非ASCII字符、空格或者特殊符号的列名,需要用方括号[]作为标识符包裹,这样数据库才能准确识别列名。修改你的查询语句:

// 正确示例:用方括号包裹日文列名
$sql = "SELECT [基準日時], 英文列名 FROM YourTableName";
$stmt = sqlsrv_query($conn, $sql);

3. 查看返回结果的实际键名

有时候哪怕你觉得列名正确、字符集也没问题,还是可能因为驱动的转换问题导致返回的数组键名和预期不符。你可以先打印返回的数组,确认实际的键名是什么:

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    // 先打印整行数据,查看实际键名
    print_r($row);
    // 根据实际键名访问,比如如果键名是乱码,可能需要调整字符集
    // echo $row['实际键名'] . "<br />";
}

4. 更新SQLSRV驱动版本

旧版本的Microsoft PHP SQLSRV驱动对非ASCII字符的支持不够完善,建议你更新到最新版本的驱动,确保它能正确处理日文等非拉丁字符的列名。

按照这几个步骤排查,应该能解决你遇到的「Undefined index: 基準日時」问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:13:32