“Failed building wheel”因pip尝试从源码构建mysql-connector-python时缺少编译环境,该包默认不提供Windows/macOS预编译wheel;最稳解法是安装指定纯Python版本:pip install mysql-connector-python==8.0.33。

pip install mysql-connector-python 为什么报“Failed building wheel”?
这不是驱动错误,而是 pip 尝试从源码构建 mysql-connector-python 时缺少编译环境。该包默认不提供 Windows/macOS 的预编译 wheel,尤其在没有 Visual Studio Build Tools(Windows)或 Xcode Command Line Tools(macOS)时必然失败。
- 最稳解法:改用官方推荐的纯 Python 实现
mysql-connector-python,但必须指定版本——pip install mysql-connector-python==8.0.33(8.0.34+ 开始又引入了 C 扩展依赖) - 替代方案:直接装
PyMySQL,它纯 Python、无编译依赖,API 兼容mysql-connector-python,只需改一行导入:import pymysql as mysql - 别碰
mysql-connector(无 -python 后缀),那是 Oracle 官方旧版,已弃用且不支持 Python 3.9+
ConnectionError: Failed to connect to MySQL —— 是驱动问题还是配置问题?
报这个错时,90% 和驱动无关,是连接参数或服务状态导致的。先确认 mysql-connector-python 已成功 import,再排查以下几点:
-
host写成'localhost'时,MySQL 默认走 socket 连接;若需走 TCP,显式写'127.0.0.1' -
user和password要和 MySQL 中CREATE USER语句一致,注意区分'root'@'localhost'和'root'@'%' - MySQL 8.0+ 默认认证插件是
caching_sha2_password,而旧版 connector 不支持——要么升级到mysql-connector-python>=8.0.29,要么在 MySQL 里执行:ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass';
为什么 cursor.execute() 执行 INSERT 却没写入数据库?
mysql-connector-python 默认开启事务,所有 DML 操作必须显式提交,否则连接断开就回滚。这不是 bug,是设计行为。
- 手动提交:
conn.commit(),记得放在cursor.execute()之后、conn.close()之前 - 自动提交模式:初始化连接时加参数
autocommit=True,如:mysql.connector.connect(..., autocommit=True) - 用上下文管理器更安全:
with conn.cursor() as cursor:只保证 cursor 自动关闭,不自动 commit —— 仍需自己调conn.commit()
UnicodeEncodeError: 'latin-1' codec can't encode character …
这是 MySQL 连接默认字符集不匹配导致的,尤其在存中文或 emoji 时高频出现。根本原因不是 Python 编码,而是 connector 连接时没声明 charset。
立即学习“Python免费学习笔记(深入)”;
- 连接时强制指定:
charset='utf8mb4'(不是utf8,后者不支持 emoji) - 确保 MySQL 服务端配置支持:
character-set-server=utf8mb4,且对应数据库/表也用CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci - 如果用 PyMySQL 替代,同样要传
charset='utf8mb4',否则一样炸
真正麻烦的是混合使用不同 connector 版本和 MySQL 版本时的隐式字符集协商,建议所有连接字符串统一显式写死 charset,别信默认值。



















