我遇到了使用LiveCode的问题,但我不知道问题出在哪里,或者是否与ODBC驱动程序有关。使用LiveCode通过ODBC从SQL Server检索unicode数据
LiveCode中内置的应用程序通过ODBC定期连接到SQL Server数据库,以检索各种数据。
负责该数据库的应用程序正在升级,并作为其中的一部分,所有的文本字段都被转化为Unicode文本字段。实质上,这意味着之前定义为varchar的字段现在被定义为nvarchar,而之前定义为文本的字段现在定义为ntext。 (这是顺便说一下SQL Server 2008中。)
使用我们一直在过去使用的查询,我们现在得到一个字符(在该领域的第一个字符),而不是整个文本。我可以解决这个现在在选择查询指定转换为varchar,例如当用来制造像 SELECT ID的请求的应用程序,名字从TAB1 现在使得像 SELECT ID的请求,转换(VARCHAR (255),name)AS name FROM tab1
这就行得通 - 我找回了我以前得到的东西 - 但(a)它很笨拙,(b)现在很好,当客户端正在迁移所有现有的数据存入数据库,但迟早他们可能会利用这种升级的方式在字段中输入一些Unicode字符,然后我大概不会把它们拿出来。
不幸的是我没有访问数据库或应用程序,以便插入测试数据 - 但我假设会出现这样的问题 - 最有可能不会很明显,即有将只是一个微妙的问题,我的应用程序不处理输入的数据(但认为是)。
所以:是有办法,一个LiveCode应用程序,使用当前的ODBC驱动程序,可以从一个nvarchar或ntext字段检索正确完整的数据?
您目前使用哪些代码从数据库中提取数据? – runrevmark 2013-03-20 13:11:55
查看以下Monte的答案 - 真正使用'revdb_query','revdb_movenext'和'revdb_columnbynumber',但是尝试使用'revQueryDatabase' /'revMoveToNextRecord' /'revDatabaseColumnNumbered'来代替,并且产生了相同的(错误的)结果。 在同一数据库的测试应用程序中使用'revDataFromQuery'确实会检索完整的数据,但不幸的是在这个应用程序中不是一个简单的选项。 – 2013-03-21 12:39:21
你在使用revDatabaseColumnNumbered()的结果,还是在第三个参数中使用“持有者变量”?由于UTF-16是二进制数据,因此不能使用结果。 – runrevmark 2013-03-21 13:22:32