【TDengine 使用环境】
测试
【TDengine 版本】
3.3.6.9
【操作系统以及版本】
20.04.1-Ubuntu
【部署方式】非容器部署
【遇到的问题:问题现象及影响】
我linux下使用https://github.com/taosdata/taos-connector-odbc中实现的odbc连接器,在采用SQLBindParameter的方式实现数据批量插入,对超级表中无符号类型如INT UNSIGNED的列,指定C类型为SQL_C_ULONG,SQL类型为SQL_INTEGER时函数返回_stmt_bind_param(): General error:#3 Parameter converstion from `SQL_C_ULONG[0xffffffee/-18]` to `SQL_INTEGER[0x4/4]` not implemented yet。请问这个问题该如何解决或能否绕过。
CrisPei
(Cris Pei)
2025 年11 月 19 日 08:06
2
TDuser_cvoW_7092:
INT UNSIGNED
对于SQL类型 SQL_INTEGER 推荐C类型使用 SQL_C_LONG 或 SQL_C_UBIGINT
CrisPei
(Cris Pei)
2025 年11 月 19 日 09:56
4
你好,经查询,如报错提示所示,目前odbc对int unsigned的类型支持有限,仅支持c类型和sql类型分别是:SQL_C_CHAR, SQL_VARCHAR。建议的临时方案:
数据库使用int类型,可使用的c类型和sql类型组合是:SQL_C_LONG, SQL_INTEGER;
2.数据库使用bigint类型,可使用的c类型和sql类型组合是:SQL_C_SBIGINT, SQL_BIGINT;
int unsigned和SQL_C_CHAR, SQL_VARCHAR一起是什么使用场景?
好的,谢谢。
我们在taos-connector-odbc-main/src/core/stmt.c中
照着:
{SQL_C_LONG, SQL_INTEGER, TSDB_DATA_TYPE_INT,
\_stmt_param_adjust_reuse_sqlc_long,
\_stmt_param_conv_dummy},
添加了:
{SQL_C_LONG, SQL_INTEGER, TSDB_DATA_TYPE_UINT,
\_stmt_param_adjust_reuse_sqlc_long,
\_stmt_param_conv_dummy},
然后对int unsigned使用SQL_C_LONG, SQL_INTEGER,然后就能正常使用绑定参数的方式插入数据了。(我们也用类似的方式处理了tinyint unsigned及smallint unsigned)
请问这种修改方式会不会有什么问题?
CrisPei
(Cris Pei)
2025 年11 月 20 日 01:14
8
修改的位置正确,可以在这里补充不支持类型,相同位数的有符合和无符号内存布局相同,测试写入数据和实际存储数据一致就没问题
ok。
再问一个别的问题:使用ODBC连接器如何指定使用原生连接/WebSocket?
原生连接默认端口为 6030,WebSocket 连接默认端口为 6041。
我现在ODBC连接器使用的是6030接口能连接数据库,但使用6041连不上。
CrisPei
(Cris Pei)
2025 年11 月 20 日 03:13
10
使用WebSocket连接需要配置DSN的连接类型为WebSocket,并确保taosAdapter正常工作。
CrisPei:
WebSocket
我在linux下使用的类似–conn ‘DRIVER=/usr/lib/libtaos_odbc.so;SERVER=127.0.0.1:6030;UID=root;PWD=taosdata;DATABASE=foo’的方式指定的。这种能指定websocket连接吗?
CrisPei
(Cris Pei)
2025 年11 月 20 日 06:09
12
WebSocket方式需将SERVER部分替换成URL,如:URL=http://127.0.0.1:6041 ;
我这里有错误:conn.c[858]:conn_driver_connect(): General error:parsing:DRIVER=/usr/lib/libtaos_odbc.so;URL=http://localhost:6041 ;UID=root;PWD=taosdata;
好的,谢谢。 还有一个问题 。现在odbc连接器对应的动态库libtaos_odbc.so需要动态链接libtaos.so及libtaosws.so(C/C++连接器)? 也就是说ODBC连接器还是依赖C/C++连接器的实现?