由于在用zabbix使用ODBC进行监控mysql中的某个表的指标时出现的情况,表创建时使用utf8,但是使用zabbix进行测试时返回SQL query returned empty result.,用isql进行测试时ODBC无法也无法返回中文,故猜测是由于ODBC配置的问题。
经过在MySQL官网论坛中查找资料后终于解决:
在字符串中使用的字符(2 字节或 16 位)通常称为宽字符,而不是多字节字符。宽字符总是 16 位,而多字节字符可能与此不同,甚至可以是可变长度。
ODBC 支持两种主要类型:ANSI 字符(SQLCHAR 类型为 8 位)和宽字符(SQLWCHAR 类型为 16 位)。因此,适用于 ANSI 的函数具有 A 后缀(如 SQLConnectA()),适用于宽字符的函数具有 W 后缀(如 SQLConnectW())。
当您的应用程序使用 SQLConnect() 时,函数会根据程序中的 Unicode 设置映射到 A 或 W。
在 MySQL 中使用 UTF8 字符集时,字符从 8 位到 24 位不等,而 UTF8MB4 可以达到 32 位。请注意,它与 UTF32 不同,UTF32 的所有字符都是固定的 32 位长度。
指定 CHARSET=UTF8MB4 允许 ODBC 驱动程序执行从 UTF8MB4 字符集的多字节变长字符到 ODBC 支持的宽 16 位字符的正确转换。
因此在odbc.ini文件中加入下面的字符设置就可以成功返回中文,并且在zabbix进行测试后也返回结果成功
vim /etc/odbc.ini
CHARSET=UTF8MB4