Php 从数据库返回时,文本数据被切断

Php 从数据库返回时,文本数据被切断,php,sql-server,string,casting,truncate,Php,Sql Server,String,Casting,Truncate,当我在php中使用MSSQL读取一个包含很长内容的字段时,我得到一个错误 警告:mssql_query()[function.mssql query]:仅Unicode排序规则中的Unicode数据或ntext数据不能发送到使用DB Library(如ISQL)或ODBC 3.7版或更早版本的客户端 我在网上搜索并找到了解决这个问题的方法,发现我需要转换结果以获得可读文本 SELECT CAST(Content AS TEXT) AS Content FROM myTable 然而,我遇到的另

当我在php中使用MSSQL读取一个包含很长内容的字段时,我得到一个错误

警告:mssql_query()[function.mssql query]:仅Unicode排序规则中的Unicode数据或ntext数据不能发送到使用DB Library(如ISQL)或ODBC 3.7版或更早版本的客户端

我在网上搜索并找到了解决这个问题的方法,发现我需要转换结果以获得可读文本

SELECT CAST(Content AS TEXT) AS Content FROM myTable
然而,我遇到的另一个问题是,文本数据在4096个字符之后被截断。是否有进一步读取文本的方法,或者有其他方法来强制转换返回的数据


谢谢

如果您正在Management Studio中计算角色,请尝试:

SELECT LEN(Content), DATALENGTH(Content) FROM dbo.myTable;
还显示4096吗?我打赌不会

我认为你不想扮演文本角色。我假设您使用的是NTEXT,因为您可能有Unicode字符。转换为文本将消除任何双字节字符,并实际更改数据。也许您可以从应用程序中尝试以下操作:

SELECT CONVERT(NVARCHAR(MAX), Content) FROM dbo.myTable;

而且不要依赖ManagementStudio的输出来证明数据库中的实际内容。默认情况下,它会被截断,即使更改默认值(不同的字符计数取决于结果到文本或结果到网格),它也会被限制为固定的最大值。如果您想知道一列中有多少数据,请询问SQL Server(就像我在上面所做的那样),而不是Management Studio。

数据库中的内容是什么类型的?您确定它存储的字符数超过4096个吗?内容为ntext。我确信它存储了超过4096个字符。当我通过myLittleAdmin读取数据库时,它在PHP代码中被截断后会显示更多的文本。SQL Server的哪个版本?为什么要使用NTEXT而不是NVARCHAR(MAX)?如何通过计算ManagementStudio中的输出来验证是否有4096个字符?这被应用程序截断,完全不反映数据库中的内容。我没有使用Management Studio,我使用php代码查询数据库,然后使用“echo strlen($content)”获取输出/字符数。此外,当我使用LEN(content)时,我得到的错误与我直接查询字段(不使用CAST)的错误完全相同@你能在管理工作室试试吗?这将证明问题出在PHP或您正在使用的驱动程序版本上。你能编辑这个问题来包含我对这个问题留下的评论的答案吗?我解决了这个问题,在PHP设置中,它将文本值长度从mssql限制为4096。所以我只需要将值更改为一个对我有效的足够大的数字。