【问题标题】:SQL Server returned column name truncated to 29 characters using PHPSQL Server 使用 PHP 返回的列名被截断为 29 个字符
【发布时间】:2011-01-11 14:12:50
【问题描述】:

我有一个 SQL Server 查询,我从中获取结果并插入到类似的数组中

while($row = mssql_fetch_array($res, MSSQL_ASSOC)) { ... }

现在,问题在于查看$row 我看到名为customer_social_sequrity_number 的列成为键customer_social_sequrity_numbe。所有其他键似乎都被限制为 29 个字符。这是一个限制吗?我找不到有关此类限制的任何信息。

这有点拖累,因为我从第三方数据库导入数据并使用数组的键将数据映射到对象。

似乎不是 PHP 方面的限制。它可能对 SQL Server 部分有一些限制吗?使用MS Query Analyzer 运行查询似乎没问题。

【问题讨论】:

    标签: php sql-server arrays


    【解决方案1】:

    我找到了问题的答案。似乎在 Windows 中,使用了 Microsoft 的 DBLIB,并且返回列名的函数基于 DBLIB 中的 dbcolname() 函数。 DBLIB 显然是为 SQL Server 6 开发的,其中列名的最大长度为 30。因此,最大列长度为 30 个字符。

    您可以在此处获取适用于 Windows 的 FreeTDS 版本,该版本有望解决此问题:http://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows

    同样在 Linux 上,这不会是一个问题,它只会影响 Windows

    【讨论】:

      【解决方案2】:

      this:What is the max key size for an array in PHP? 似乎暗示您没有遇到 PHP 数组键限制问题

      【讨论】:

        【解决方案3】:
        1. 确保数据库中的列明确称为customer_social_sequrity_number 并且没有被切断
        2. 检查这绝对是键而不是数组的值,如果是值,那么它是数据而不是列名

        【讨论】:

        • 查询包含C.ED1 AS customer_social_sequrity_number,所以很确定。是的,这是关键。
        猜你喜欢
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        相关资源
        最近更新 更多