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

Python SSH连接MySQL查询时如何解码变音字符

解决Python SSH连接MySQL的变音字符编码问题

你的问题核心是MySQL连接的字符集配置不完整,导致变音字符被以字节形式返回(比如J\xf6rg是ö的UTF-8字节表示)。以下是几个可行的解决方法:

1. 完善pymysql连接的字符集参数

直接在pymysql.connect中指定完整的字符集配置,推荐使用utf8mb4(MySQL原生的utf8实际是utf8mb3,不支持部分特殊字符,utf8mb4是完整的UTF-8标准):

db_connection = pymysql.connect(
    host="127.0.0.1", 
    port=port, 
    db="kalender",
    user="oktay",
    password="mypw",
    charset='utf8mb4',
    use_unicode=True
)

use_unicode=True会让pymysql直接返回Unicode字符串,而非原始字节串。

2. 执行查询前设置会话级字符集

如果单纯修改连接参数无效,可以在获取游标后执行以下语句,强制设置会话的字符集:

cursor = db_connection.cursor()
# 先设置会话字符集
cursor.execute('SET NAMES utf8mb4;')
cursor.execute('SET CHARACTER SET utf8mb4;')
cursor.execute('SET character_set_connection=utf8mb4;')
# 再执行你的查询
cursor.execute(query)

3. 在SQL查询中显式转换字段字符集

因为你使用了CONCAT和GROUP_CONCAT,这些函数可能继承数据库的默认字符集,导致编码转换异常。可以在拼接时显式转换字段的字符集:

SELECT 
    CONCAT("[",
      GROUP_CONCAT(
        CONCAT("{BID:'", BID, "'"),
        CONCAT("Benutzer:'", CONVERT(Benutzer USING utf8mb4), "'"),
        CONCAT(",Vorname:'", CONVERT(Vorname USING utf8mb4), "'}"
          )
        , "]") 
AS json FROM termincal_ben;

4. 手动解码返回结果

如果以上方法都没生效,可以手动将返回的字节串解码为UTF-8字符串:

result = cursor.fetchall()
# 假设结果是单个元组中的字符串
if result:
    decoded_result = result[0][0].decode('utf-8')
    print(decoded_result)

优先尝试前两种方法,这是从连接层面解决问题的根本方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30