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

