【问题标题】:PHP MSSQL VARCHAR 255 character issuePHP MSSQL VARCHAR 255 字符问题
【发布时间】:2026-01-29 09:00:01
【问题描述】:

问题:针对 VARCHAR(256+) 字段的 MSSQL 查询在 PHP 中仅返回 255 个字符,无论 VARCHAR 大小是否大于 255。

我看到了对解决方法 herehere 的引用,其中解决方法基本上是将 VARCHAR 转换为 TEXT:

SELECT CAST(myField AS TEXT) AS myField FROM myTable

但是,如果我有一堆查询,例如:

SELECT * FROM myTable

我的意思是,当然,我可以查找所有类似的查询并执行以下操作:

SELECT CAST(myField AS TEXT) AS 'myField2', * FROM myTable

并将随后的 PHP 变量从 myField 更新为 myField2,但这对于我的应用程序来说是一项相当大的任务。更不用说我必须查找所有具有 VARCHAR(256+) 的表中的所有字段,然后在我的 PHP 应用程序中查找所有受影响的查询。

我们正在运行 PHP 5.2.17,我知道 MSSQL 不再受支持/开发。我已经看到 Microsoft 支持的 SQL Server 驱动程序here,但我必须将我的 PHP 版本更新到 5.3.6 或 5.4。我不完全确定如果我进行升级会带来什么。另外,我们必须在 PHP 应用程序中将所有 mssql_connect() 更改为 sqlsrv_connect() 和其他函数从 mssql 到 sqlsvr 的版本。

是否有人知道任何其他解决方法(例如我可以从可靠来源下载的较新的 DbLib C API),这样我就不必去修改我的 PHP 应用程序中的所有内容?

【问题讨论】:

  • 我不知道 mssql,但这会起作用吗? SELECT CAST(* AS TEXT) FROM myTable ? PHP 不太关心数据类型,因此您不必在 PHP 中强制转换为整数或日期。然后,您唯一需要做的就是全局查找SELECT * 并将其替换为SELECT CAST(* AS TEXT)。如果我提出的查询当然有效:)
  • 有趣的想法。我以前没见过 :) 不幸的是,效果不太好:sqlfiddle.com/#!3/ba562/2

标签: php sql sql-server


【解决方案1】:

编辑 /etc/freetds.conf 以将 tds version 设置更改为 8.0(如果您的服务器是 MS SQL Server 2000 或更高版本)或 7.0(如果使用 MS SQL Server 7),必要时取消注释设置。

【讨论】:

  • 不知道为什么,但这对我有用。谁能解释一下?
  • @XinChen:似乎早期版本的协议对 VARCHAR 施加了 255 个字符的长度限制。更多最新版本不会。
【解决方案2】:

启动“MS SQL 管理工作室”

在这个窗口的主菜单Query\Query Options\中选择results\text,最后你会看到“每列显示的最大字符数”默认为255,更改它。

【讨论】:

  • 嗨@kibir,我尝试了你的建议,但没有任何运气。我相信您的建议只会更改管理工作室 UI 的设置,而不是 PHP ODBC 库。
【解决方案3】:

我知道这是一个老问题,但我今天正在寻找相同的答案;)

我测试了这个解决方案

select *, CAST(DESCRESTESA AS TEXT) AS DESCRESTESA from table_name

效果很好

【讨论】: