LabVIEW实现MySQL数据库查询完整指南:从环境搭建到排坑
2026/9/15 18:05:15 网站建设 项目流程

做测控上位机这么多年,我手里大多数LabVIEW程序的数据存储都是TDMS、Excel或者文本文件,直到有一次客户要求“按工单号、按时间段、按测试结果组合查询过去半年所有产品数据”,文件方案的缺陷一下就暴露了。那次项目最后改成LabVIEW查MySQL数据库才算真正落地,本文就把这套基于labview实现MYSQL数据库查询功能的完整思路写出来,从环境搭建、连接串写法、程序框图实现到疑难排坑全部覆盖,适合正在做设备数据追溯、产线MES对接、测试报表系统的工程师直接参考。

1. 为什么要在LabVIEW里接MySQL:从文件存储到数据库查询的转变

1.1 LabVIEW原生数据存储方案的局限

LabVIEW最常见的几种数据落盘方案,我这些年都实际用过一遍。TDMS格式在高频采集场景下性能非常好,写入速度快、体积小,NI官方也一直在推它,但它本质是“面向文件”的存储方式,适合按批次或按通道归档,真要做条件查询就麻烦了——你只能用TDMS文件浏览器按文件名翻,或者写脚本遍历文件再按内部通道索引,数据量大了以后,客户要一个按“日期范围+产品型号+测试结果”的过滤报表,你基本要写一个专门的搜索工具,维护成本很高。

Excel方案在数据量小的时候确实直观,双击打开就能看,但行数超过几万行就开始卡顿,而且多台测试工位同时写入一个Excel文件会有文件锁冲突问题。LVM文本文件就更不用说了,解析慢、体积大,只适合临场调试。

我并不是说这些方案要被MySQL完全替代,而是它们各自有适用边界。文件型存储适合采集端的实时写盘与离线分析,关系型数据库适合结构化业务数据的存储、检索、统计和多人共享。LabVIEW做上位机时,正好横跨这两个场景:一边要采集,一边要做业务展示。过去大家习惯于用文件夹管理测试数据,本质上是用文件路径模拟了“数据库索引”,但数据关系复杂化以后,这个土办法就撑不住了。

1.2 MySQL在测控场景中的定位与优势

MySQL在测控系统里扮演的角色,其实和它在互联网后端完全不同。我们不需要它做高并发秒杀,而是需要它稳定、易用、跨平台,然后配合LabVIEW的界面能力做数据追溯和报表展示。相比SQL Server和Oracle,MySQL部署体积小,社区版免费,工控机上配置不高也跑得动,而且ODBC/Connector驱动对LabVIEW的支持很成熟,我自己用下来没有发现什么硬伤。

最重要的三个优势,首先是查询能力——以前要写半天的“按条件过滤数据”用一条SQL就解决了,而且可以随时加索引优化;其次是多客户端访问——测试工位、质量工程师的办公电脑、服务器上的看板程序可以同时连同一个数据库,数据不分离;第三是数据管理生态成熟,Navicat、MySQL Workbench这些可视化工具可以让你不写代码就能维护数据,这在现场调试时特别实用。

我在多个项目里的做法是:采集端依旧用TDMS做高速流盘,保证波形、原始数据不丢;而每个测试工位在单次测试完成后,把“工单号、序列号、型号、判定结果、关键参数、测试时间”这些结构化字段同步写入MySQL。这样既保住了高频采样的性能,又拥有了灵活的追溯查询能力,两个方案并不冲突,反而互补。

1.3 什么样的项目才建议上数据库

我也见过把简单事情搞复杂的情况。如果只是单机记录几十个点位温度,一天一两个文件,那Excel也足够了,上MySQL反而是负担。我的判断标准就三条:数据量是否大到文件打开都费劲;是否有跨时间、跨工位的组合查询需求;是否需要多台电脑共享同一份数据。任何一条成立,就值得上数据库。

如果确认要上,那方案上也有讲究。对于中小规模测试系统,MySQL完全够用;如果公司已经有统一的MES系统,那LabVIEW直接对接MES的数据库接口或者API更合理,不要自己另起炉灶建一套库,后面数据对不上很麻烦。这个判断在项目初期就要做,不然后期改架构代价很大。

2. 环境搭建最容易翻车的三个环节:服务、驱动、工具包

2.1 MySQL服务端的安装与初始账号配置

MySQL服务端的安装方式有两种:MSI安装包和ZIP免安装版。我在工控机上通常用MSI包安装,因为它会自动注册Windows服务、配置环境变量,省去手动初始化的步骤。如果你一定要用免安装版,下载ZIP包后解压,然后以管理员身份打开命令行,执行mysqld --initialize-insecure初始化,再执行mysqld --install注册服务,最后net start mysql启动服务。注意免安装版默认root账号密码为空,初始化后要第一时间改掉。

mysqld --initialize-insecure mysqld --install MySQL80 net start MySQL80

这里有一个非常关键的细节:不要直接拿root账号给LabVIEW程序用。root权限太高,一旦程序里的SQL写错,或者被非预期操作影响,会波及整个数据库实例。我习惯在MySQL里创建只用于本项目的专用账号,并按需授最小权限。

CREATE USER 'labview_user'@'%' IDENTIFIED BY 'YourPassword123'; GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'labview_user'@'%'; FLUSH PRIVILEGES;

如果LabVIEW和MySQL在同一台机器上,可以先用localhost测试;如果数据库在远程服务器上,必须用@'%',并且要检查MySQL的绑定地址配置,默认情况下MySQL只允许本机访问,远程连接需要修改配置文件中的bind-address=0.0.0.0,还要放行防火墙3306端口。

2.2 ODBC驱动版本:64位和32位的坑

这个坑我亲眼见过很多次,也是搜索热词里"labview安装错误"高频出现的原因之一。当前主流LabVIEW版本大部分是32位程序(即使装在64位Windows系统上),而ODBC数据源管理器分32位和64位两套,两者互不相认。如果你安装了64位的MySQL Connector/ODBC,在LabVIEW 32位程序里调用Database Connectivity Toolkit时,就会报找不到数据源,或者连接失败。

所以,请务必安装32位版本的MySQL Connector/ODBC。我常用的是8.0版本,安装完成后,ODBC管理器中显示的驱动名是MySQL ODBC 8.0 Unicode Driver。你可以在控制面板的“ODBC数据源管理器”里确认驱动列表,也可以在命令行里分别打开两个版本的管理器界面:odbcad32.exe对应32位,ODBCAD64.exe对应64位。

LabVIEW版本需要安装的ODBC驱动管理器入口
32位LabVIEW(最常见)32位Connector/ODBCC:\Windows\SysWOW64\odbcad32.exe
64位LabVIEW64位Connector/ODBCC:\Windows\System32\odbcad64.exe

这个驱动问题如果没处理好,后面所有的连接测试都会失败。我的建议是干脆把32位和64位驱动都装上,这样无论工程用哪个位数都不至于卡在环境上。

2.3 LabVIEW Database Connectivity Toolkit的安装确认

LabVIEW本身不带MySQL驱动,需要通过NI的Database Connectivity Toolkit来访问ODBC数据源。这个工具包在新版LabVIEW中可以在NI Package Manager里搜索安装,也可以随部分版本的DVD安装包一起勾选。安装完成后,在程序框图的函数选板里找到Connectivity → Database,里面会有一堆DB Tools开头的VI,这就说明工具包已经就绪。

如果函数选板里找不到Database这一项,多半是工具包没装上,或者License没有激活。我遇到过一台现场工控机,LabVIEW运行引擎和开发环境装得好好的,但翻遍选板找不到数据库函数,最后发现是安装时漏掉了NI Database Connectivity Toolkit组件,补装后重启LabVIEW就出现了。这步确认没什么技术含量,但不确认好就会在后面写代码时卡住,总觉得是自己程序有问题,其实是工具箱压根不存在。

3. 核心调用链拆解:从连接字符串到查询结果的数据通路

3.1 DSN和无DSN连接方式的选择

用Database Connectivity Toolkit连接MySQL,有两类连接方式。第一种是预先在ODBC管理器里创建系统DSN,把数据源名称、服务器地址、端口、数据库名、用户名密码都配置好,随后在LabVIEW里只用DSN=mydsn;UID=root;PWD=123456这样一个简短连接字符串就能建立连接;第二种是不配置DSN,而是把完整的连接参数一次性写到连接字符串里,例如:

DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=127.0.0.1;PORT=3306;DATABASE=testdb;USER=labview_user;PASSWORD=YourPassword123;CHARSET=utf8mb4;OPTION=3;

两种方式我都用过。项目初期在固定工位上用DSN很方便,打开LabVIEW就能连;但这套程序拷到另一个环境时,必须先把DSN配置同步过去,否则运行时就报数据源找不到。所以后来我统一改成无DSN的连接字符串,把服务器IP、端口、用户名、密码放到一个INI配置文件里,程序启动时读进来拼成连接串。这样部署到新工位只需要改配置文件,不用在每台机器上手动配置ODBC,省了很多现场维护时间。

3.2 连接字符串里最容易写错的地方

连接字符串看似简单,但每个字段都有可能出错,这里列几个我实际踩过的点。

Driver名字不能写错,也不能省略花括号。{MySQL ODBC 8.0 Unicode Driver}这个字符串必须和控制面板ODBC管理器里显示的驱动名完全一致,版本不同名字可能带年份或版本号,比如5.x版本就叫MySQL ODBC 5.3 Unicode Driver,先用odbcad32.exe确认准确名称再写。

USER参数和PASSWORD参数要和MySQL里的账号一致,权限不足就报Access denied。SERVER参数可以用127.0.0.1localhost,如果数据库在远程,必须写远程服务器IP。CHARSET参数我强烈建议加上utf8mb4,否则中文读写很容易出现乱码,这一点在后面的排坑章节还会详细说。OPTION=3是一个常见组合值,表示启用CLIENT_FOUND_ROWS等行为,一般保持默认即可,不影响基本查询。

3.3 标准查询流程:五步走

在LabVIEW程序框图上,一次完整查询的调用链是固定的:

DB Tools Open Connection -> DB Tools Execute Query -> DB Tools Fetch Record Data -> DB Tools Variant To Data DB Tools Close Connection

第一步打开连接。DB Tools Open Connection输入连接字符串和可选的超时毫秒数,输出Connection Handle连接引用。这个VI会真实地和MySQL建立网络连接,耗时取决于网络状况,默认超时时间可能比较长,现场如果服务器没开,程序会卡在这里一段时间,后面我会建议一个自动重连机制。

第二步执行查询。这里可以用DB Tools Execute Query,也可以用DB Tools Select Data。前者更通用,传SQL语句进去就能拿到Recordset引用;后者在查询结果是记录集时更加直观。两者本质差不多,我一般用Execute Query。

第三步取数据。DB Tools Fetch Record Data是核心,输入Recordset引用和需要取出的行数,输出Variant类型的数据。这个Variant是LabVIEW里比较“抽象”的类型,里面装的其实是查询结果集,你需要再往下转一步才能真正在界面上使用。

第四步转换数据类型。DB Tools Variant To Data可以按你期望的LabVIEW数据类型把Variant转出来,比如二维字符串数组、二维双精度数组或者簇数组。这一步是整个调用链里最容易出问题的地方,因为MySQL里列的类型和LabVIEW里的类型不是一一对应的,我在第5章会专门讲处理方法。

第五步释放资源。所有查询读完之后,用DB Tools Close Connection关闭连接引用。如果不关闭,连接会一直占着MySQL的会话资源,程序跑一整天之后数据库连接数暴涨,别人就连不上了。这属于基础素养问题,但我在很多同事的代码里都见过忘记关闭连引用的情况,所以还是提一嘴。

4. 一个真实可跑的查询Demo:建表、界面与程序框图对照

4.1 建表与测试数据准备

为了把流程讲清楚,我设计一个足够典型的场景:某电子厂测试工位,每次测试记录工单号、产品型号、测试结果、测试值、测试时间和备注。建表SQL如下:

CREATE TABLE test_records ( id INT AUTO_INCREMENT PRIMARY KEY, work_order VARCHAR(32) NOT NULL, product_model VARCHAR(32), test_result VARCHAR(16), test_value DOUBLE, test_time DATETIME, remark TEXT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO test_records (work_order, product_model, test_result, test_value, test_time, remark) VALUES ('WO2024001', 'Model-A', 'PASS', 12.34, '2024-08-01 09:15:00', '正常'), ('WO2024001', 'Model-B', 'FAIL', 15.67, '2024-08-01 10:30:00', '电压超限'), ('WO2024002', 'Model-A', 'PASS', 11.98, '2024-08-02 14:20:00', '正常');

这里注意字符集设定为utf8mb4,可以完整支持中文。如果你在MySQL Workbench或者Navicat里手动建表,也尽量手动选一下字符集,不要用默认的latin1或者gbk,不然后面读出来的中文都是问号。

4.2 前面板设计思路

查询界面的前面板不必花哨,布局合理就行。我的习惯是:顶部放连接参数输入区,包括服务器地址、端口、用户名、密码、数据库名,这几个控件在调试时用,正式部署时可以从配置文件读取并隐藏;中间放查询条件输入区,包括工单号输入框、产品型号下拉框、测试结果下拉框(全部/PASS/FAIL)、测试起始时间和结束时间控件;下面是一个“查询”按钮和一个“清空”按钮;再往下是结果显示区,用一个表格控件(Express Table)展示查询结果,旁边放一个状态字符串,用来显示“共查询到XX条记录”或者错误信息。

4.3 程序框图实现要点

程序框图建议用事件结构驱动。把“查询”按钮的“值改变”事件作为触发分支,在事件框内按顺序实现:构建SQL语句→打开连接→执行查询→取出数据→转换类型→刷新表格→关闭连接。

以查询按钮事件为例,框图中关键的连线逻辑如下:

[查询按钮"值改变"事件] └─ 读取各查询条件控件值 └─ 拼接SQL字符串(动态部分按条件决定) └─ DB Tools Open Connection └─ DB Tools Execute Query(输入SQL) └─ DB Tools Fetch Record Data(设置返回行数为-1表示全部拉取) └─ DB Tools Variant To Data(转换为二维字符串数组) └─ 表格控件属性节点(值属性赋数组) └─ DB Tools Close Connection └─ 状态栏字符串更新

关于表格控件显示有一个小技巧:DB Tools Variant To Data转换出来的二维字符串数组,第一行不一定是列标题,MySQL的ODBC驱动通常会把列名单独放在结果集合里,需要你用DB Tools Get Recordset Info之类的函数读取列名,或者干脆在SQL里给每个列起别名,然后把列名数组单独拼到表格数组前面。我常用的简单做法是:

  1. 先用DB Tools Get Recordset Info拿到列数;
  2. 手动构造一个字符串数组作为表头;
  3. 把表头数组和查询结果二维数组用Build Array拼接,再赋值给表格控件的“值”属性。

在把数组写入表格控件之前,有一个很实用的性能优化:先将表格控件的Defer Panel Updates属性设置为True,数据写入完成后再设置为False。这样界面不会因为逐单元格刷新而疯狂闪烁,数据量大的时候体验差别非常明显。

如果查询结果为空,DB Tools Fetch Record Data返回的Variant转换后可能是空数组,程序里要做一个空数组判断,提示“没有找到匹配的记录”,不要让一个空数据直接把表格控件清成一片空白,用户会以为程序卡了。

5. 结果集处理与动态查询:让查询真正好用起来

5.1 数据类型转换:建议在SQL层先统一

MySQL的字段类型很丰富,DATETIME、DECIMAL、TINYINT等类型在ODBC驱动返回到LabVIEW时,会变成不同的Variant内部类型。这就导致一个很头疼的问题:你在开发环境下测试,发现某一列转出来是字符串,换一台机器、换一个驱动版本,可能又变成浮点数或时间对象,类型不匹配会让DB Tools Variant To Data转换时报错。

我的避坑经验是:在SQL语句里就把所有列统一转成字符串,让LabVIEW端只处理二维字符串数组。这样做虽然牺牲了一点“类型安全”,但对查询显示界面来说完全够用。例如:

SELECT id, work_order, product_model, test_result, CAST(test_value AS CHAR) AS test_value, DATE_FORMAT(test_time, '%Y-%m-%d %H:%i:%s') AS test_time, remark FROM test_records

DATE_FORMAT这个函数特别有用,它能把DATETIME转换成固定格式的字符串,省得在LabVIEW里再和时间格式控件纠缠;CAST(test_value AS CHAR)把浮点数转成字符串,精度损失在显示场景下可以接受。排序、统计、范围过滤这些计算仍然可以在SQL的WHERE、ORDER BY、GROUP BY里完成,并不会因为结果转成字符串而受影响。

5.2 参数化查询:为什么不要拼接SQL

很多LabVIEW工程师写数据库查询时习惯用字符串拼接:

"SELECT * FROM test_records WHERE work_order = '" + 工单号 + "'"

这样写起来很直观,但有两个实际问题。一是特殊字符问题——工单号里如果含有单引号,比如"WO'2024",整个SQL就会语法报错;二是SQL注入安全问题,万一某个输入框被人恶意填入了' OR '1'='1这类内容,你的程序就会执行出预料之外的查询,这在一个工厂质量系统里是不可接受的。

在Database Connectivity Toolkit中,可以用DB Tools Create Parameterized Query来创建参数化查询,SQL语句中用问号?做占位符,然后逐一绑定参数值。参数化查询不仅安全,还能让MySQL预编译执行计划,在循环执行大量查询时性能更好。

即使你暂时不想用参数化VI,也至少要对单引号做转义处理,把输入字符串中的单引号替换成''。这是一个防御底线。

5.3 动态多条件查询的构建模式

实际项目中,用户不太可能每次都填满所有查询条件,更多时候是“工单号填了就按工单号查,没填就按时间范围查”。这种动态条件不能直接写死SQL,而是在程序里根据控件状态拼接WHERE子句。

我习惯用一个通用模式:先把所有条件短语放进一个字符串数组,遍历之后用AND连接起来,再拼到查询语句后面。条件为空就不加入数组,这样每一段条件都是独立的,逻辑清晰。

conditions := 空数组 如果 工单号输入不为空 则 conditions.Add("work_order = '" + 工单号 + "'") 如果 产品型号下拉不为"全部" 则 conditions.Add("product_model = '" + 产品型号 + "'") 如果 结果下拉不为"全部" 则 conditions.Add("test_result = '" + 结果 + "'") 如果 起始时间已设定 且 结束时间已设定 则 conditions.Add("test_time BETWEEN '" + 起始时间字符串 + "' AND '" + 结束时间字符串 + "'") whereClause := "" 如果 conditions非空 则 whereClause := "WHERE " + conditions用" AND "连接 sql := "SELECT ... FROM test_records " + whereClause + " ORDER BY test_time DESC"

时间范围的查询用BETWEEN比较简单,但要注意起始时间是当天0点,结束时间要带23:59:59,否则结束那天凌晨之后的数据就查不出来了。日期条件在LabVIEW里要从时间控件转换成字符串,格式务必和MySQL的DATETIME格式对齐,比如YYYY-MM-DD HH:MM:SS。如果输入框支持模糊匹配,比如按产品型号随意搜,可以用LIKE '%关键字%',需要注意LIKE通配符在拼接时同样要防止单引号和百分号引起的意外行为。

5.4 大数据量查询的分页与排序

当表里数据量涨到几十万行以后,一次把所有结果拉到LabVIEW前台显示是不现实的。一个祖传的SQL可能是SELECT * FROM test_records WHERE ...,数据一多,LabVIEW界面直接卡死几秒,体验非常差。

我现在的做法是强制分页:前面板加入“页码”和“每页行数”两个控件,SQL尾部拼上LIMIT 页大小 OFFSET 偏移量。同时用一条SELECT COUNT(*)先统计符合条件的总行数,在界面上显示“第X/共Y页”。MySQL的LIMIT分页对中小数据量足够高效,如果数据量特别大再考虑基于id或时间戳的键集分页。

这里有一个小建议是,所有可排序字段尽量在MySQL端加索引,尤其是work_ordertest_time这两列几乎必然出现在WHERE和ORDER BY里。搜索热词里的“mysql创建索引”指的就是这回事。加了索引之后查询速度的提升是数量级的,不加索引的话,一旦数据量上来,有心杀贼无力回天,只能眼巴巴看磁盘IO打满。

6. 实测中踩过的坑:从Access denied到中文乱码

6.1 Access denied问题的完整排查链路

有一次帮同事调试,LabVIEW程序连接MySQL时报错:[MySQL][ODBC 8.0(w) Driver]Access denied for user 'labview_user'@'localhost'。我当时的排查顺序是下面这样的,每一步都能快速缩小范围,比瞎试强。

第一步,先在命令行用同样用户名密码手动连一下MySQL,看账号密码本身是否正确:mysql -ulabview_user -pYourPassword123 -h127.0.0.1 -P3306 testdb。如果命令行能连上而LabVIEW连不上,说明账号密码没问题,问题出在ODBC或连接字符串;如果命令行也连不上,就是账号或权限问题。

第二步,检查账号授权的主机范围。MySQL授权是区分客户端的,'labview_user'@'localhost'只允许本机连接,'labview_user'@'%'允许任意主机。如果程序通过127.0.0.1回环连接,但授权里用的是@'%',有些场景下也会出问题,需要把两者都检查一遍。

SELECT user, host FROM mysql.user WHERE user = 'labview_user';

第三步,检查MySQL服务是否在监听3306端口,netstat -ano | findstr 3306,确认没有其他进程占用端口,也确认MySQL配置的port=3306没有改过。

第四步,检查远程连接时的绑定地址和防火墙。MySQL默认绑定了127.0.0.1,只能本机访问,如果LabVIEW要连远程库,必须修改my.inibind-address,同时放行防火墙入站规则3306端口。Windows防火墙没放行时,报错往往是“连接超时”或“Can't connect to MySQL server”,而不是Access denied。

经过这套排查,那次的问题最终定位在MySQL的账号授权主机是localhost,而连接字符串里用的服务器地址是局域网IP,改成@'%'授权后解决。

6.2 中文乱码:一个连接字符串参数就能解决

中文乱码的问题几乎每个做数据库的工程师都会遇到。现象是:命令行和Navicat里看表数据都是正常中文,但LabVIEW查询结果显示“???”,或者写入时存进数据库变成乱码。

这个问题的根源在于字符集不一致。MySQL服务端、数据库、表、连接四层字符集只要有一层不匹配,就会出乱码。我的处理方案有三板斧:第一,建库建表统一用utf8mb4;第二,连接字符串里加CHARSET=utf8mb4;第三,MySQL安装完成后,在my.ini里设置character-set-server=utf8mb4作为全局兜底。

如果这些设置都做了,某个历史表里的数据还是乱码,那就是入库时就已经错了,需要先修复存量数据再改配置。所以测试系统刚开始部署时一定要把字符集规范好,这个规范比功能先行的成本低得多,后期补数据非常痛苦。

6.3 连接复用:不要每次查询都重连

我的第一个LabVIEW数据库程序里,每次查询都调一次Open Connection和Close Connection,简单粗暴,程序也能跑,但有个致命问题:MySQL默认的wait_timeout是8小时,如果程序打开了连接后长时间没有新的查询,连接会被服务端断开。这时候你再拿这个引用去执行SQL,就会报错“MySQL server has gone away”。而如果每次查询都重新连接,虽然不会遇到这个错误,但每次连接都要三次握手加认证,高频操作时性能损耗也不小。

我的建议是折中方案:打开一个连接引用保存在全局数据结构里,程序启动时建立连接,程序退出时再关闭;同时在执行SQL前检查连接是否有效,如果无效就自动重连。比如,遇到server has gone away错误时重新调一次Open Connection,再重试当前查询。这个重连逻辑虽然多写十几行代码,但对长时间运行的产线程序来说几乎必备。

如果 error code == MySQL server has gone away: 关闭旧引用 重新 Open Connection 更新全局连接引用 重新执行当前SQL

6.4 其他值得注意的小细节

表格控件列宽的设置也是影响使用体验的点。查询结果写入表格后,默认所有列等宽,中文列头和数据会挤在一起。最简单的方式是在程序启动时或者点击查询后,手动写一个循环,根据每列可能的最大字符长度设置Column Widths属性。

另外,查询按钮的事件处理里,SQL执行期间界面会处于“假死”状态。如果查询非常慢,用户会以为程序崩溃。我比较推荐的做法是,把查询逻辑放进独立循环或用Queue转发给后台Worker线程执行,通过用户事件把结果发回UI线程。对于一般小数据量查询,直接在当前事件里同步执行也可以接受,但如果程序还承担着采集任务,那就必须异步化了,否则采集会断流。

最后提醒一个连接字符串上的细节:MySQL 8.0默认开启了caching_sha2_password认证插件,部分较老版本的ODBC驱动可能不兼容。如果连接时报“Authentication plugin 'caching_sha2_password' cannot be loaded”,要么升级Connector/ODBC到8.0以上,要么在MySQL里把用户改回mysql_native_password。升级驱动是更省心的选择,不用动数据库账号体系。

最后再说一点我的体会

LabVIEW接MySQL这个需求,本质上不是LabVIEW的问题,也不是MySQL的问题,而是测控软件在走向数据管理正规化时必然会遇到的一步。文件存储方案不是不能用,但当你需要按工单、按时间、按结果去检索历史数据时,数据库的成熟能力比你自己写的任何搜索算法都可靠。我在这套方案上线后最直观的感受是,客户提需求的方式明显变了,以前是“把文件夹打包发我”,现在是“按条件查一下那批产品的测试记录”,这就是整个系统数据能力升级后的连锁反应。如果你也在做类似的上位机数据追溯项目,希望这篇文章里那些踩出来的坑能帮你少走几步弯路,有问题也欢迎在评论区交流具体场景。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询