更新时间:2026-07-28 GMT+08:00
分享

常见问题

连接数据源时报错:[UnixODBC][Driver Manager]Can't open lib 'xxx/xxx/gsqlodbcw.so':file not found

可能的原因及确认方法:

  • odbcinst.ini文件中配置的路径不正确。

    确认的方法:执行ls命令查询错误信息中的路径,以确保该gsqlodbcw.so文件存在,同时具有执行权限。

  • gsqlodbcw.so的依赖库不存在,或者不在系统环境变量中。

    确认的方法:执行ldd命令查询错误信息中的路径,如果是缺少libodbc.so.1等UnixODBC的库,那么按照连接数据库中的步骤重新配置UnixODBC,并确保它的安装路径下的lib目录添加到了LD_LIBRARY_PATH中。如果重装仍无法解决,可以手动将数据库安装包下的unixodbc/lib下的内容复制到UnixODBC的安装路径下的lib目录。如果是缺少其他库,请将ODBC驱动包中的lib目录添加到LD_LIBRARY_PATH中。如果缺少其他标准库,请自行安装。

连接数据源时报错:[UnixODBC]connect to server failed: no such file or directory.

可能的原因及确认方法:

  • 配置了错误的/不可达的数据库地址,或者端口。

    请检查数据源配置中的Servername及Port配置项。

  • 服务器侦听不正确。

    如果确认Servername及Port配置正确,请根据Linux下配置数据源或者Windows下配置数据源中数据库服务器的相关配置,确保数据库侦听了合适的网卡及端口。

  • 防火墙及网闸设备。

    请确认防火墙设置,将数据库的通信端口添加到可信端口中。

    如果有网闸设备,请确认相关的设置。

错误提示:authentication method 10 not supported.

可能的原因:

使用开源客户端时可能会遇到到此问题。数据库中存储的密码校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。

  • 数据库并不存储用户密码,只存储用户密码的哈希码。
  • 当用户更新用户密码或者新建用户时,数据库会同时存储两种格式的哈希码,这时将兼容开源的认证协议。
  • 当旧版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户密码,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做密码认证。
  • MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。

要解决该问题,可以更新用户密码,或者新建一个用户,赋予同等权限,使用新用户连接数据库。

错误提示:Driver's SQLAllocHandle on SQL_HANDLE_DBC failed.

可能的原因:

可执行文件(比如UnixODBC的isql,以下都以isql为例)与数据库驱动(gsqlodbcw.so)依赖于不同的ODBC的库版本:libodbc.so.1或者libodbc.so.2。此问题可以通过如下方式确认:

ldd `which isql` | grep odbc
ldd gsqlodbcw.so | grep odbc

若输出的libodbc.so后的后缀数字不同或者指向不同的磁盘物理文件,则可确认存在版本冲突问题。isql与gsqlodbcw.so都会要求加载libodbc.so,若它们加载了不同的物理文件,便会导致两套完全同名的函数列表同时出现在同一个可见域里(UnixODBC的libodbc.so.*的函数导出列表完全一致),产生冲突,无法加载数据库驱动。

解决方法:

确保需保留的UnixODBC版本后,卸载冲突版本(如libodbc.so.2),对保留的libodbc.so.1文件创建同名但后缀为.so.2的软链接(即新建的libodbc.so.2指向libodbc.so.1)。

字符编码出现乱码

可能的原因:

客户端/服务端字符集不一致(如客户端使用GBK,服务端使用UTF8)。

解决方法:

统一应用、ODBC驱动、数据库三端的编码。

错误提示:unsupported frontend protocol 3.51: server supports 1.0 to 3.0.

可能的原因:

目标数据库版本过低,或者目标数据库为开源数据库。

解决方法:

使用对应版本的数据库驱动连接目标数据库。

相关文档