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

MySQL5.5与PHP5.6下如何保留列名中℃特殊字符的格式?

解决MySQL列名中℃符号乱码问题(PHP5.6+MySQL5.5环境)

问题描述

数据库表中存在含℃符号的列名(实际列名为Internal Battery Temperature (°C)),使用PHP5.6查询MySQL5.5的information_schema获取列名并拼接为逗号分隔字符串时,输出到PowerShell控制台出现乱码,显示为Internal Battery Temperature (├âΓÇÜ├é┬░C)。该列数据类型为VARCHAR,排序规则为latin1_swedish_ci。

解决方案

1. 修正SQL查询的别名错误

你的SQL语句未给GROUP_CONCAT结果设置别名,代码中$rowChannel['Channels']无法正确取值,需添加别名:

$sqlChannelNames = "SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY ordinal_position) AS Channels
                    FROM information_schema.columns
                    WHERE table_schema = '$device_id' 
                    AND table_name = '$device_name';";

2. 数据库连接时指定匹配字符集

由于表的排序规则是latin1_swedish_ci,列名以latin1编码存储,需在创建数据库连接后设置对应字符集,确保PHP读取到正确的原始编码数据:
在openSQL函数中,创建mysqli实例后添加:

$conn->set_charset('latin1');

3. 转换编码适配控制台输出(可选)

若需要以UTF-8编码输出到PowerShell,可将读取到的latin1编码字符串转换为UTF-8:

// 使用mb_convert_encoding
$channels = mb_convert_encoding($rowChannel['Channels'], 'UTF-8', 'latin1');

// 或使用iconv
$channels = iconv('latin1', 'UTF-8//TRANSLIT', $rowChannel['Channels']);

4. 配置PowerShell控制台为UTF-8编码

PowerShell默认编码通常不是UTF-8,会导致UTF-8字符显示乱码,执行PHP脚本前先设置控制台编码:

chcp 65001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:10:32