【问题标题】:SQL Server: "Unicode data in a Unicode-only collation or ntext data..." issue, but can't change FreeTDS versionSQL Server:“仅 Unicode 排序规则或 ntext 数据中的 Unicode 数据...”问题,但无法更改 FreeTDS 版本
【发布时间】:2013-12-04 04:06:32
【问题描述】:

在尝试使用 PHP 从我的 SQL Server 数据库中 SELECT 类型为 nvarchar 的列时,我遇到了一个熟悉的问题:

Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.

我知道我可以使用 SELECT CAST(columnName as TEXT) as columnName from tableName... 来解决这个问题,但这很麻烦而且很烦人。加上Adminer只要有这个错误就不能工作,我不能将Adminer配置为CAST它的列名。

在similar questions 和PHP docs 中,许多人提到您可以通过更改文件/etc/freetds.conf/ 来解决此问题...但我使用的是Windows,而不是*nix,因此不存在此类文件。 (我联系了托管公司的支持人员以确认这一点。)

有什么方法可以选择nvarchar 列,而不必每次都添加烦人且乏味的CAST 样板文件?并让管理员工作?

或者我唯一的选择是切换到与 DB-Library 不同的驱动程序吗?

【问题讨论】:

  • 你解决了吗?我也有同样的问题
  • 对不起,这个项目最终被放弃了......如果我解决了这个特定问题,我这辈子都不记得了。

标签: php sql-server unicode


【解决方案1】:

Windows 解决方案:- 您始终可以使用 Windows 驱动程序连接到 Mssql 数据库。(Windows 的本机驱动程序可用并且不难安装,我相信。如果需要,我可以发送。)

当您的机器是基于 Linux 的(我会特别说 Centos)时,我有连接到 mssql 的解决方案。 我犯的错误是我没有配置位于 /etc/freetds.conf 中的 FreeTds 如果是 Ubuntu 系统,它不会在这里。

检查“典型的 Windows 系统”行配置该部分 请检查以下一项

[connectionname]
host = **nameOrIpofTheServer**
port = 1433
tds version = 8.0
client charset = utf-8

在您的代码中使用连接名称。 请注意,如果您希望这些设置起作用,请使用连接名称 PDO 的连接对象将如下所示:-

$dbh = new PDO ("dblib:host=**$hostname**:$port;dbname=$dbname","$username","$pw"); // 

一般一

$dbh = new PDO ("dblib:host='**connectionname**':$port;dbname=$dbname","$username","$pw");

//与连接名称的实际连接 现在尝试从您的 mssql 数据库中选择具有 UTF-8 字符的数据。 我会工作。

在此环境中工作时您将面临的下一个问题是:- 将 UTF-8 字符保存到数据库。 一个简单但复杂的解决方案,您必须在数据库查询前面添加 N 前缀,您将在其中为字段分配值。 例如:- UPDATE [users] SET [Address]=N'большой' WHERE [ID]= 1; 这里的地址是 UTF-8 字段。像 NTEXT、NCHAR 和 NVARCHAR。

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2012-02-22
    • 2011-04-08
    • 2014-11-25
    • 2015-09-21
    • 2013-03-10
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多