【发布时间】:2019-10-12 13:55:28
【问题描述】:
Erlang ODBC 中似乎存在一些与 nvarchar(MAX) 和 varchar(MAX) 相关的问题。
例如运行SELECT 'Bob' [name], 50 [age] FOR JSON PATH 应该给出以下信息:
JSON_F52E2B61-18A1-11d1-B105-00805F49916B
-----------------------------------------
[{"name":"Bob","age":50}]
Erlang ODBC 产生:
{:selected, ['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'],
[
[
<<0, 0, 80, 0, 114, 0, 111, 0, 75, 246, 34, 87, 97, 33, 0, 128, 32, 0, 70, 0, 105, 0, 108, 0, 74, 246, 33, 87, 92, 34, 0, 128, 105, 0, 99, 0, 114, 0, 111, 0, 73, 246, 32, 87, 102, 35, 0, 128, 32,
0>>
]
]}
在另一次运行中......
{:selected, ['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'],
[[<<0, 0, 0, 0, 0, 0, 0, 0, 207, 63, 70, 190, 0, 5, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 204, 63, 69, 190, 253, 6, 0, 138, 7, 0, 0, 0, 67, 0, 0, 0, 205, 63, 68, 190, 0, 7, 0, 137, 112, 97>>]]}
我正在使用以下连接设置:
timeout: 30_000,
auto_commit: :on,
binary_strings: :on,
tuple_row: :off,
scrollable_cursors: :off,
trace_driver: :off,
extended_errors: :on
FOR JSON clause is of type nvarchar(MAX) 的输出。
请在 Erlang ODBC 中处理nvarchar(MAX) 的问题是否有任何解决方法。
【问题讨论】:
-
如果将
binary_strings配置成:off会得到什么? -
@SteveVinoski 相同的随机二进制结果
-
我找不到任何确定的方式,但如果 ODBC 驱动程序支持“for json”子句,我会感到非常惊讶。 ODBC 并没有真正支持超出 ANSI 标准 SQL 的内容——故意的。
-
如果我是你,我首先会问 SQL-Server ODBC 驱动程序是否支持“FOR JSON”子句。您可能想在此处发布问题:dba.stackexchange.com,因为您更有可能在那里获得知识渊博的答案。
-
FWIW 如果错误仍然存在,我不会感到非常惊讶。一个人报告了 ODBC Driver 13 的错误。其他人报告说在 2019 年 2 月 28 日仍然看到这个问题——所以如果问题仍然存在,我不会感到惊讶。