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
相关产品推荐
相关产品推荐

