rust - 在 Rust 中使用 iodbc

标签 rust rust-cargo

我正在尝试通过 Rust 应用程序连接到 FileMaker(不要问我为什么......) - 我遇到了针对 iodbc 而不是 unixodbc 构建的 FM ODBC 驱动程序的墙,但是我找到的所有 ODBC crate 正在使用unixodbc。
我对 cargo 周围的低级内容不太熟悉,所以我不知道是否以及如何使 Rust odbc crates 链接到 iodbc 而不是 unixodbc。我问谷歌,但空无一物。
我可以强制 cargo 链接到特定的库(unixodbc 和 iodbc 都存在于系统上,但默认情况下似乎总是选择 unixodbc)?

最佳答案

披露:我是 odbc-api 的所有者和 odbc-sys箱。
您可以使用 Rust 的 iodbc,但必须启用 iodbc您的 Cargo.toml 中的功能标志.

[dependencies]
odbc-api = { version = "0.40.1", features = ["iodbc"] }
设置此标志可实现三件事:
您的应用程序链接到 libiodbc.so而不是 libodbc.so .
否则,您将收到一个链接器错误,指示 -lodbc没有找到。
您的应用程序使用 ODBC 3.5 标准。
...并将 ODBC 版本声明为 3.0。
iODBC 目前仅支持 3.5 版。
如果您的应用程序将使用 ODBC 3.8,它将无法创建 ODBC 环境。在这种情况下,iodbc 驱动程序管理器不会返回任何错误。它只是失败了。
您的应用程序使用窄 (Utf-8) 函数调用。
iodbc 似乎不适用于 Utf-16。不过,这是轶事知识。也可能是数据源的问题。
如果没有这个,您将无法创建 ODBC 连接。错误消息中的状态代码被截断(少于五个字母)。odbc-api将假设您的系统具有本地使用 utf-8 编码。如果不期望出现 panic ,以防特殊字符出现在查询或连接字符串中。

关于rust - 在 Rust 中使用 iodbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66474954/

相关文章:

asynchronous - 无法使用 `impl Future` 将异步函数存储在向量中

rust - 无法构建Dotenv V0.15.0-使用rust 的 cargo

windows - Cargo 无法在 Windows 上构建 termbox-sys

testing - 通过使用 "cargo test"的功能标志运行其他测试

import - 如何使用 Cargo/Rust 在模块中包含同一目录中的文件?

rust - 如何在 Rust 中定义无限范围的通用整数类型?

asynchronous - 克隆字符串以在Rust中进行异步移动关闭

Rust actix-web : the trait `Handler<_, _>` is not implemented

rust - 如何用actix-web的Json类型解析 "implementation of serde::Deserialize is not general enough"?

rust - 带有多个二进制文件的死代码警告?