C# .Net连接MySQL报错‘unknown system variable lower_case_table_names’求助
问题分析与解决方案
核心原因
出现unknown system variable lower_case_table_names错误的本质是MySQL Connector/NET 8.1.0与MySQL 5.0.5 Community版本兼容性不匹配。MySQL 5.0.5是非常老旧的版本,而Connector/NET 8.1.0是为MySQL 8.0及以上版本开发的,它会尝试读取MySQL 5.0.5中不存在的系统变量lower_case_table_names,从而触发报错。
VS服务器资源管理器能正常连接,是因为它依赖的MySql for Visual Studio 2.0.5对旧版MySQL的兼容性更好,和代码中使用的Connector/NET不是同一组件。
解决方案
1. 降级MySQL Connector/NET版本
安装与MySQL 5.0.5匹配的Connector/NET版本,推荐使用MySQL Connector/NET 6.4.6(官方支持MySQL 5.0的最后几个稳定版本之一):
- 卸载当前的MySQL Connector 8.1.0
- 下载对应版本并安装,确保版本与.NET Framework 4.7.2兼容
2. 调整连接字符串
在连接字符串中添加Allow User Variables=True参数,避免驱动尝试读取不兼容的系统变量:
connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + "; " + "UID=" + uid + ";" + "PASSWORD=" + password + ";Allow User Variables=True;";
3. 确认my.ini配置生效
修改lower_case_table_names后,需确保MySQL服务重启后配置生效:
- 打开命令提示符,执行
mysql -u root -p登录数据库 - 执行
SHOW VARIABLES LIKE 'lower_case_table_names';查看当前值 - 若未生效,检查my.ini位置是否正确(XAMPP的my.ini通常在
xampp/mysql/bin目录下),修改后重启MySQL服务
测试代码优化建议
简化代码,用using语句自动释放连接资源,避免重复创建实例:
private void button1_Click(object sender, EventArgs e) { string server = "127.0.0.1"; string database = "database"; string uid = "root"; string password = "root"; string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};Allow User Variables=True;"; using (MySqlConnection cnn = new MySqlConnection(connectionString)) { try { cnn.Open(); MessageBox.Show("Connection Open ! "); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
内容的提问来源于stack exchange,提问作者Jacek Olesinkiewicz
相关产品推荐
相关产品推荐

