【问题标题】:FreeTDS MSSQL nvarchar(max) issueFreeTDS MSSQL nvarchar(max) 问题
【发布时间】: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_Version 7.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.confodbc.ini 中更改TDS_Version = 7.3。然后将client charset = UTF-8 行添加到freetds.conf。最后,在odbc.ini 中添加Charset = UTF8。由于您使用的是 0.95,因此应该支持这些设置。试一试,让我知道它是否有效?

标签: sql-server pdo freetds unixodbc


【解决方案1】:

到目前为止,强制转换列似乎是最好的选择,对我的应用程序来说效果很好。

CAST(Column AS varchar(4000)) as Column

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多