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
相关产品推荐
相关产品推荐

