【发布时间】:2016-08-10 07:43:53
【问题描述】:
我正在通过 Unix 系统上的 PDO 从 MSSQL 服务器中提取数据。尝试了 Easysoft ODBC 驱动程序,它按预期工作(但价格昂贵!)在我们承诺购买许可证之前,我只是在试用 FreeTDS。
尝试从设置为 nvarchar(MAX) 的 SQL 服务器中提取数据 - 结果显示为一些非常奇怪的字符,而不是预期的字符。我无法编辑数据库中的列类型。
例如,nvarchar(max) 字段中的值设置为“admin”,但显示为“ ›÷Ý” - 所有其他列类型似乎都可以正常工作。
要使用 Easysoft 驱动程序解决此问题,我必须将“VarMaxAsVarchar”设置为开启 (http://www.easysoft.com/products/data_access/odbc-sql-server-driver/manual/configuration.html)
FreeTDS 中是否有类似的设置?
作为参考,我连接到 Microsoft SQL Server 2012 数据库,TDS 版本设置为 7.4。
这里是配置文件:
/etc/freetds.conf:
[global]
# TDS protocol version
tds version = 7.4
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
[mssql_freetds]
host = xxxxx
port = xxxx
tds version = 7.4
/etc/odbc.ini
[mssql_freetds]
Driver=FreeTDS
Description=MSSQL FreeTDS
Server=xxxxx
Port=xxxx
TDS_Version = 7.4
有什么想法吗?
【问题讨论】:
-
在所有字符串资源之前检查错过的
N文字... -
您使用的是什么版本的 FreeTDS? v1.0 即将发布并且是唯一支持版本
TDS_Version7.4 的版本:github.com/FreeTDS/freetds/blob/master/NEWS 否则,它将回退到版本 7.1。您可以通过tsql -C找到我们使用的版本。 -
嗨 @FlipperPA 使用 v0.95.91 - 没有意识到 v1 正在生产中。我要等一下吗,因为这是在生产服务器上?
-
仅供参考,目前通过在 SQL 查询中使用
CAST(Column AS varchar(4000)) as Column来绕过它。这行得通,但在整个过程中使用起来很痛苦 -
我肯定会推迟,我只是注意到自己放弃了 1.0,并且多年来一直在使用 FreeTDS。让我们尝试三件事。首先,在
freetds.conf和odbc.ini中更改TDS_Version = 7.3。然后将client charset = UTF-8行添加到freetds.conf。最后,在odbc.ini中添加Charset = UTF8。由于您使用的是 0.95,因此应该支持这些设置。试一试,让我知道它是否有效?
标签: sql-server pdo freetds unixodbc