LabVIEW连接MySQL报0x80040e14 SQL语法错误排查求助
故障核心原因
报错本质是MySQL 8.0默认配置与ODBC驱动的兼容问题,并非代码中手动写了双引号。
MySQL 8.0相较5.7版本,默认sql_mode参数开启了ANSI_QUOTES规则:该规则下双引号包裹的内容会被服务端识别为表名、字段名这类标识符,而非普通字符串值。你所用的MySQL ODBC 8.0(a)驱动在拼接SQL语句时会自动给字段、值添加引号,在这个规则下就会出现"RFID_tag_number'这类引号不匹配的语法错误,最终抛出0x80040E14异常。
重装5.7后Workbench仍显示8.0版本的配置路径,是因为Windows下MySQL卸载不会自动清理旧版本的注册表项、系统服务残留,Workbench读取到的是未删除的旧版本配置记录,不代表当前实际运行的MySQL版本是8.0。另外直接拷贝正常设备的应用文件夹无法修复问题,因为ODBC驱动、MySQL服务配置都是系统级参数,不存在于应用目录内。
解决步骤
- 对齐ODBC驱动版本
打开与LabView程序位数匹配的ODBC数据源管理器(32位程序打开C:\Windows\SysWOW64\odbcad32.exe,64位程序打开C:\Windows\System32\odbcad32.exe),在「驱动」页签卸载所有MySQL ODBC 8.0版本驱动,安装与正常运行设备完全一致的5.7系列MySQL ODBC驱动,禁止用8.0版本ODBC驱动跨版本连接。 - 修正MySQL服务端sql_mode配置
不要以Workbench显示的配置路径为准,直接打开Windows服务列表,找到正在运行的MySQL服务,右键查看属性,「可执行文件路径」中--defaults-file=参数后跟随的路径,就是当前服务实际加载的my.ini配置文件。打开该文件,在[mysqld]分段下添加/修改sql_mode配置,移除ANSI_QUOTES项,和正常运行的5.7设备配置对齐即可,参考配置如下:
修改完成后重启MySQL服务生效。[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION - 清理旧版本残留(可选)
如果需要修正Workbench显示的配置路径错误,直接删除注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\下对应MySQL 8.0的旧服务项,删除C:\ProgramData\MySQL下的MySQL 8.0残留配置文件夹,重新注册MySQL 5.7的系统服务即可。该路径显示问题不影响程序实际运行,只要驱动、sql_mode配置对齐即可恢复正常。
验证方式
配置完成后先在ODBC数据源中点击「测试连接」确认连通性,再运行LabView程序执行RFID标签读写逻辑,不再抛出SQL语法错误即为修复完成。
内容的提问来源于stack exchange,提问作者Kshitij Matey
相关产品推荐
相关产品推荐

