易语言连接服务器MySQL数据库,最稳妥的路线是安装32位MySQL ODBC驱动,用易语言自带的“数据库连接”组件通过无DSN连接串直连;需要事务控制和更高性能时,再考虑第三方MySQL支持库或调用libmysql.dll,不建议一上来就折腾DLL。 易语言编译出来的是32位程序,这个前提决定了后面所有驱动、DLL都必须选32位版本,先把这一点刻在脑子里,能少踩一半坑。
易语言连接MySQL数据库需要什么驱动:ODBC还是原生支持库
易语言本身没有内置MySQL协议栈,它走的是Windows的ODBC通道,也就是说,你的电脑上必须先装一个“翻译官”MySQL ODBC驱动,这个驱动由MySQL官方提供,叫Connector/ODBC,免费下载,安装时注意选32位版本,因为易语言程序是32位,装64位驱动它根本看不见。
装完驱动后,可以到C:\Windows\SysWOW64\odbcad32.exe打开32位ODBC数据源管理器,在“驱动程序”页签里看到MySQL ODBC 8.0 Unicode Driver才算成功,实际开发时不必手工建DSN,直接用无DSN连接串更灵活,部署到服务器上也不用重复配置数据源。
三种连接方式横向对比
| 连接方式 | 部署难度 | 稳定性 | 功能覆盖 | 适合场景 | 成本 |
|---|---|---|---|---|---|
| ODBC驱动 | 低 | 较好 | 常规增删改查足够 | 快速上线、中小项目 | 免费 |
| 第三方MySQL支持库 | 中 | 取决于版本维护 | 较强,支持事务和参数化 | 长期维护的业务系统 | 商业版通常付费 |
| 调用libmysql.dll | 高 | 较好但需处理内存 | 强,接近原生 | 有C基础、追求性能 | 免费但开发成本高 |
行业共识认为,中小规模数据量下ODBC方案的稳定性完全够用,没必要为了“看起来高级”去手写API声明,如果你问易语言连接服务器MySQL数据库和PHP哪个更简单,PHP内置mysqli确实少一层驱动,但易语言走ODBC也就多装一个驱动的事,部署难度并不高,真正要留意的是商业支持库的授权费用,后面Q&A会细说。
实操:易语言通过ODBC连接服务器MySQL数据库的完整步骤
服务器端先放行:用户权限、bind-address与安全组
别急着写代码,先把服务器这头理顺,登录MySQL后执行下面几条命令,创建一个只允许从指定网段访问的账号,密码换成强密码:
CREATE USER 'yiyuyan'@'%' IDENTIFIED BY '你的强密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON your_db. TO 'yiyuyan'@'%'; FLUSH PRIVILEGES;
如果连接时报Authentication plugin 'caching_sha2_password' cannot be loaded,说明ODBC驱动版本偏旧,要么升级到Connector/ODBC 8.0以上,要么临时把账号认证插件改成mysql_native_password:
ALTER USER 'yiyuyan'@'%' IDENTIFIED WITH mysql_native_password BY '你的强密码';
接着检查MySQL配置文件里的bind-address,要改成0.0.0或注释掉,否则只监听本地,云服务器还要在安全组放行3306端口,别只改系统防火墙,在本地电脑用telnet 服务器IP 3306测一下,能通再往下走。
易语言端配置:数据库连接组件与连接串
在易语言窗口上放一个“数据库连接”组件和一个“记录集”组件,数据库连接组件的连接文本这样写:
ODBC;Driver={MySQL ODBC 8.0 Unicode Driver};Server=服务器IP;Port=3306;Database=your_db;User=yiyuyan;Password=你的强密码;charset=utf8mb4;Option=3;ConnectTimeout=10;
代码里调用:
数据库连接1.连接 (“ODBC;Driver={MySQL ODBC 8.0 Unicode Driver};Server=服务器IP;Port=3306;Database=your_db;User=yiyuyan;Password=你的强密码;charset=utf8mb4;Option=3;ConnectTimeout=10;”)
如果真 (数据库连接1.是否连接 () = 假)
信息框 (“连接失败,检查驱动位数和账号权限”, 0, , )
返回 ()
如果真结束
记录集1.置连接 (数据库连接1)
记录集1.打开 (“SELECT id,name FROM users LIMIT 10”, 1, 1)
charset=utf8mb4建议直接写进连接串,能省掉后面中文乱码的麻烦,密码里如果有分号、花括号,连接串解析会出问题,要么换密码,要么用DSN方式避开。
增删改查的最小可用代码
插入一条记录并取回自增ID:
数据库连接1.执行SQL (“INSERT INTO users(name,created_at) VALUES('测试用户',NOW())”)
记录集1.打开 (“SELECT LAST_INSERT_ID() AS new_id”, 1, 1)
调试输出 (记录集1.读字段值 (“new_id”, ))
记录集1.关闭 ()
更新和删除同理,把SQL换成UPDATE或DELETE即可,查询多行时用记录集1.到下一条()循环,读完记得关闭(),如果服务器在香港或海外,易语言连接香港云服务器MySQL数据库延迟高怎么办?连接串里把ConnectTimeout调到10到15秒,查询尽量带索引和LIMIT,别一次拉几万行回来。
易语言连接云服务器MySQL数据库失败怎么办:排查顺序与命令
从网络到账号的排查清单
按下面顺序走,别跳步:
- 先ping服务器IP,确认基础网络通。
- 再telnet服务器IP 3306,不通就是安全组或防火墙没放行。
- 在服务器本地执行
mysql -u yiyuyan -p -h 127.0.0.1,通不了是账号或权限问题。 - 检查
my.ini里的bind-address,改成0.0.0后重启MySQL。 - 在服务器上执行
netstat -an | findstr 3306,看监听地址是不是0.0.0:3306。 - 最后核对ODBC驱动位数,32位程序必须配32位驱动。
常见错误码对应关系:10060多半是网络或防火墙;1045是账号密码或权限不对;未发现数据源名称并且未指定默认驱动程序基本就是驱动没装或位数不对。
ODBC驱动位数不匹配的典型表现
很多人装完驱动在控制面板里能看到,易语言却死活连不上,原因就是打开的是64位ODBC管理器,易语言程序是32位,必须用SysWOW64目录下的odbcad32.exe查看驱动,如果那里没有MySQL驱动,重新下载32位Connector/ODBC安装包,安装时选“Typical”即可,装完重启易语言,让组件重新加载驱动列表。
事务与连接超时的小坑
ODBC默认自动提交,做批量写入时如果中途失败,前面已经写进去的数据不会回滚,需要事务时,在同一个数据库连接上依次执行START TRANSACTION、业务SQL、COMMIT,出错就ROLLBACK,另外MySQL的wait_timeout默认会断开空闲连接,长时间不操作的程序最好定时执行一条SELECT 1保活,或者在使用前先判断是否连接(),断了就重连。
安全与维护:连接串别裸奔
账号最小权限与连接串保护
业内专家指出,易语言项目连接MySQL时,把数据库账号权限最小化比任何连接串加密都有效,给程序只开需要的SELECT、INSERT、UPDATE,别用root直连,连接串不要明文写在源码里,放到加密配置文件或注册表,编译前把调试输出的密码删掉,如果服务器固定IP,账号的Host限制到具体IP,别用满世界放行。
备份与监控
上线前确认服务器有定时备份,至少每天一次逻辑备份,易语言端可以加一个简单的日志记录,把连接失败、SQL执行异常写到本地文本,方便排查,据DB-Engines的数据库流行度排名,MySQL长期位居前列,社区资料和驱动更新都比较勤,遇到问题先查官方文档的ODBC章节,比到处翻旧帖子靠谱。
易语言连接服务器MySQL数据库并不复杂,先把32位ODBC驱动和服务器权限这两关过了,剩下的就是记录集和SQL的常规操作。 方案选型上,ODBC免费且够用,商业支持库按需再上,别为了一个连接功能把项目拖进授权和兼容性的泥潭。
常见问题Q&A:易语言连接服务器MySQL数据库
易语言连接MySQL数据库需要花钱买商业支持库吗?
不一定,MySQL ODBC驱动免费,常规增删改查、事务、中文存储都能覆盖,大多数项目用ODBC就够,商业支持库通常在需要参数化查询、连接池管理等高级功能时才考虑,价格视版本和授权方式而定,建议先用ODBC把业务跑通,再评估是否值得采购。
易语言32位程序能连接64位MySQL服务器吗?
能,服务器端MySQL是64位还是32位,不影响客户端连接,协议层是通用的,真正要匹配的是客户端ODBC驱动的位数:易语言编译出32位程序,就必须安装32位MySQL ODBC驱动,装64位驱动会报“未发现数据源名称”或直接找不到驱动。
易语言连接服务器MySQL数据库时中文乱码怎么解决?
连接串里加charset=utf8mb4,连接成功后执行一次SET NAMES utf8mb4,数据库和表的字符集也统一用utf8mb4,三处一致后,中文写入和读取就不会出现问号或乱码。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/782692.html


