gpt4 book ai didi

php - 为什么 SQL Server 选择查询截断 varchar 字符串?

转载 作者:可可西里 更新时间:2023-11-01 12:54:06 26 4
gpt4 key购买 nike

设置

我正在使用多个内存表来缓存我网站的数据。这是我的 mac 上的本地 Web 主机和 linux 上的开发服务器,在 php 5.5 上使用 mssql php 库

一个简化的表格如下:

CacheID INT NOT NULL
CacheData VARCHAR(MAX)

我偶尔会插入几个大值。 10,000 多个字符。插入工作正常。一个简单的查询告诉我所有数据都在字段中:

SELECT
CacheID,
LEN(CacheData)
FROM Caches

问题

但是,当我实际选择数据时,cache 列总是被截断为 8192 个字符,从而导致出现问题。简单选择:

SELECT
CacheData
FROM Caches
WHERE CacheID = 10

我检查了 varchar(max) 字符限制。它远远超过 8192。2^32 - 1

问题

为什么数据被截断了?

另一种形式的问题。我实际上遇到了这个agian并忘记了这个解决方案。花了我一点时间来记住,因为我忘记了根本原因。这是我认为 SQL Server 是罪魁祸首的搜索结果。

什么是 SQL Servers Varchar(MAX) 最大长度? - 如果您的值被截断,它可能是由 php 非 sql server 引起的。如果你只想知道最大值是多少,问题在这里得到解答:Maximum size of a varchar(max) variable

最佳答案

披露

回答我自己的问题。只是将它发布在这里,因为我花了一个多小时来解决这个问题,如果能有一个直截了当的答案就好了。我在堆栈溢出上看到过类似的问题,但它们非常针对某个用例,或者措辞糟糕,无法通过搜索结果找到

回答(mssql直接)

用于 php 的 mssql 模块在 php.ini 文件中有几个默认设置。其中一项设置是 mssql.textlimitmssql.textsize。这些设置会将任何基于文本的字段(varchar、text、nvarchar)截断为它们设置的大小。

我看到截断是在 8192 和 4096 上的帖子。所以我假设其中任何一个都可以是默认值。我将我的提高到 65535 (2^16 - 1)。

答案(通过 pdo 的 mssql)

我最近开始迁移到 PDO,发现 mssql 直接回答不适用于 pdo。

PDO 似乎有一个错误 ( not a bug but kind of a bug ) 将文本限制硬编码为 64 kb。您可以通过在长查询之前传递以下查询来覆盖它:SET TEXTSIZE -1

其他相关问题

作为旁注,我也看到了类似的问题,专门针对 SQL Server Management Studio 中的查询结果。对于可以显示或导出的字符数,程序中存在一些限制。程序中还有一些设置可以编辑显示/导出的字符数。有关此问题的更多信息 here .

关于php - 为什么 SQL Server 选择查询截断 varchar 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com