【发布时间】:2013-03-08 03:58:52
【问题描述】:
我在使用 LiveCode 时遇到了这个问题,但我不知道这是问题所在还是与 ODBC 驱动程序有关。
LiveCode 中内置的应用会定期通过 ODBC 连接到 SQL Server 数据库,以检索各种数据。
负责数据库的应用程序正在升级,作为其中的一部分,所有文本字段都将转换为 Unicode 文本字段。本质上,这意味着以前定义为 varchar 的字段现在定义为 nvarchar,而以前定义为 text 的字段现在定义为 ntext。 (顺便说一下,这是 SQL Server 2008。)
使用我们过去一直使用的查询,我们现在得到一个字符(字段中的第一个字符)而不是整个文本。我现在可以通过在选择查询中指定到 varchar 的转换来解决这个问题,例如应用程序用来发出请求的地方 选择 id,名称来自 tab1 它现在提出一个请求 SELECT id, convert(varchar(255), name) AS name FROM tab1
这行得通 - 我找回了以前得到的东西 - 但是(a)它很笨拙,并且(b)现在这很好,当客户只是将他们所有现有的数据迁移到数据库中时,但迟早他们实际上可能会利用这次升级在字段中输入一些 Unicode 字符,然后我大概不会把它们弄出来。
不幸的是,我无权访问数据库或应用程序来插入测试数据——但我假设这个问题会出现——而且很可能它不会很明显,即只会有一个微妙的问题我的应用程序没有处理输入的数据(但认为是)的问题。
那么:使用当前 ODBC 驱动程序的 LiveCode 应用程序是否可以从 nvarchar 或 ntext 字段中正确检索完整数据?
【问题讨论】:
-
您目前使用什么代码从数据库中提取数据?
-
查看下面对 Monte 的回答 - 真正使用
revdb_query、revdb_movenext和revdb_columnbynumber,但尝试使用revQueryDatabase/revMoveToNextRecord/revDatabaseColumnNumbered代替,结果相同(错误) 结果。在同一数据库上的测试应用程序中使用revDataFromQuery会检索完整数据,但不幸的是,在此应用程序中不是一个简单的选择。 -
您是在使用 revDatabaseColumnNumbered() 的结果,还是在第三个参数中使用“持有者变量”?由于 UTF-16 是二进制数据,因此无法使用结果。
标签: sql-server unicode odbc livecode