用Rust操作sql server数据库,目前能用的组件只有tiberius与odbc,tiberius只能用早期的0.1版的future,标准版的future还不能用。尝试了一下odbc, 发现表名称或字段名中文时无法操作,各位又没有解决方案?
Ext Link: https://crates.io/crates/odbc
1
共 10 条评论, 1 页
用Rust操作sql server数据库,目前能用的组件只有tiberius与odbc,tiberius只能用早期的0.1版的future,标准版的future还不能用。尝试了一下odbc, 发现表名称或字段名中文时无法操作,各位又没有解决方案?
评论区
写评论如此说来,连接SQL Server数据库,目前最靠谱的方式就是odbc-rs了。
yuana1说得对,按yuana1的写法,只要是通过create_environment_v3_with_os_db_encoding设置上编码,中文就没问题,不管是使用现成的DSN还是使用连接字符串。字符集设置成GB18030能工作,let env = create_environment_v3_with_os_db_encoding("GB18030", "GB18030").unwrap() 我没能玩转,是直接照搬官方文档的例子出的问题。
驱动也可以用新版的Native Client,这样写: let conn =env.connect_with_connection_string("Driver={SQL Server Native Client 11.0};Server=(local);Database=PayRoll;UID=sa;PWD=1234").unwrap();
对以下内容的回复:
这么写我这也能正常查询,不乱码。
主要是通过create_environment_v3_with_os_db_encoding设置上编码就好了。跟 ODBC dsn或者连接串 没有太大关系。
感谢yuana1,复制您贴出的代码,中文显示正常,改成: let env = create_environment_v3_with_os_db_encoding("UTF-8", "GB18030").unwrap();也正常。 我的想法是:不使用带名称的odbc数据源,直接通过connection_string来创建数据连接。
这就玩不转了,这个连接字符串应该如何写呢?
对以下内容的回复:
对以下内容的回复:
数据库sqlserver 2008 10.50.4000
编码 Chinese_PRC_CI_AS
ODBC 数据源都是默认的参数,除了第三步 “更改默认的数据库为”
一条正常执行的语句:select top 10 姓名,部门 from 员工信息 报:Error: State: 42000, Native error: 102, Message: [Microsoft][ODBC SQL Server Driver][SQL Server]“℃”附近有语法错误。
let env =create_environment_v3_with_os_db_encoding("GBK", "UTF-8").map_err(|e| e.unwrap())?; ... 仍然不能正常工作
使用 create_environment_v3_with_os_db_encoding(os_encoding: &str, db_encoding: &str)
例如 create_environment_v3_with_os_db_encoding("gbk", "gbk")
https://github.com/yuana1/odbc-rs
可以看看我这个, 晚上回去我解决下冲突,再提交下pr。