通过ODBC方式监控数据库,如果返回结果是全英文就很正常,但这次发现如果结果集中有中文,就会出现乱码。
查了网上的解释,说是要设置NLS_LANG变量,方法为先查询数据库编码方式(我用的是mysql):
1.jpg
在环境中设置一下(注意编码的书写并不完全一样!)
2.jpg
之后以sqlplus登录查询发现确实是可以正确返回中文了。
但是在ODBC中要怎么设置环境变量呢?经过查询unixOdbc的官网,终于找到了为unixodbc设置环境变量的方法
参考:https://www.easysoft.com/developer/interfaces/odbc/linux.html#app_a
这里说得很清楚,这个项要添加到odbc.ini文件中
4.png
特别要注意地是,一开始在设置DMEnvAttr的NLS_LANG属性时,由于担心空格影响到它的赋值,特地为后面的值加上了引号,结果却引起ora12705错误::Cannot access NLS data…
后面仔细查看上面的参考文档,发现这样一句:
5.png
注意看这里:
6.png
很明显,即使属性值中有空格,赋值时也是不需要前后加引号的,加了反而出错!
同时,在使用过程中也发现一个小小的遗憾:当我们的查询语句中含有中文时,传送到服务端似乎还是会乱码(引起查询结果状态不明确),只要查询语句中没有中文,结果集中有中文,再传送到客户端是没有问题的!到底是什么原因,有时间再详查了。
网友评论