
# 常见问题
#### 连接数据源时报错：\[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的库，那么按照[连接数据库](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0819.html)中的步骤重新配置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下配置数据源](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0819.html#ZH-CN_TOPIC_0000002620639873__section1868758163215)或者[Windows下配置数据源](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0819.html#ZH-CN_TOPIC_0000002620639873__section1638619233592)中数据库服务器的相关配置，确保数据库侦听了合适的网卡及端口。
  
- 防火墙及网闸设备。 请确认防火墙设置，将数据库的通信端口添加到可信端口中。
  如果有网闸设备，请确认相关的设置。
  
 
#### 错误提示：authentication method 10 not supported.
可能的原因：
使用开源客户端时可能会遇到到此问题。数据库中存储的密码校验只存储了SHA256格式哈希，而开源客户端只识别MD5校验，双方校验方法不匹配报错。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 数据库并不存储用户密码，只存储用户密码的哈希码。
- 当用户更新用户密码或者新建用户时，数据库会同时存储两种格式的哈希码，这时将兼容开源的认证协议。
- 当旧版本升级到新版本时，由于哈希的不可逆性，所以数据库无法还原用户密码，进而生成新格式的哈希，所以仍然只保留了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.
可能的原因：
目标数据库版本过低，或者目标数据库为开源数据库。
解决方法：
使用对应版本的数据库驱动连接目标数据库。
