You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用含mysql-connector-python的Python脚本时UTF-8字符集报错问题

解决PHP exec()调用含MariaDB连接的Python脚本时的UTF-8字符集错误

核心解决方案

以下是经过验证的可行方案,按优先级尝试:

  1. 强制Python数据库连接使用utf8mb4字符集
    直接在连接配置中明确指定字符集,避免依赖环境自动检测。修改你的Python连接代码:

    import mysql.connector
    
    db_config = {
        'user': '你的用户名',
        'password': '你的密码',
        'host': '127.0.0.1',
        'database': '你的数据库名',
        'charset': 'utf8mb4',
        'use_unicode': True
    }
    conn = mysql.connector.connect(**db_config)
    

    这会跳过mysql-connector-python的自动字符集推断,直接使用MariaDB支持的utf8mb4。

  2. 在PHP exec()调用时设置正确的字符集环境变量
    Web服务器运行PHP时的环境变量和用户CLI环境不一致,导致Python脚本无法获取正确的字符集配置。在调用时显式设置环境变量:

    // 先设置UTF-8环境变量,再调用Python脚本
    exec('export LC_ALL=en_US.UTF-8 && export LANG=en_US.UTF-8 && python3 /path/to/your/script.py', $output, $return_code);
    

    确保替换/path/to/your/script.py为实际脚本路径。

  3. 替换mysql-connector-python为mysqlclient
    mysql-connector-python与MariaDB的兼容性存在偶发问题,改用更成熟的mysqlclient(MySQLdb的分支):
    先安装依赖和库:

    sudo apt-get install python3-dev default-libmysqlclient-dev
    pip3 install mysqlclient
    

    然后修改Python脚本的连接代码:

    import MySQLdb
    
    conn = MySQLdb.connect(
        user='你的用户名',
        password='你的密码',
        host='127.0.0.1',
        database='你的数据库名',
        charset='utf8mb4'
    )
    

问题根源解释

  • IDE和CLI运行Python时,继承了用户会话的正确字符集环境变量(如LANG=en_US.UTF-8),mysql-connector-python能正确识别并使用utf8mb4;
  • PHP通过exec()调用时,Web服务器(Apache/Nginx)的运行环境缺少这些字符集变量,导致mysql-connector-python错误尝试使用MySQL旧版的utf8(仅支持3字节字符),而MariaDB在配置为utf8mb4后不再兼容该字符集声明;
  • 降级mysql-connector-python到8.0.29仅修复了CLI环境下的自动检测逻辑,但Web环境的变量缺失仍会触发bug。

额外检查项

  • 确认Python脚本开头添加编码声明:# -*- coding: utf-8 -*-
  • 验证MariaDB的my.cnf配置生效,重启服务:
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    
    [client]
    default-character-set=utf8mb4
    
  • 检查PHP的php.ini中设置default_charset = "UTF-8",重启Web服务器

内容的提问来源于stack exchange,提问作者obi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:56:08