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

Azure Runbook通过psql写入CosmosDB PostgreSQL时UTF-8编码异常

环境配置
  • 使用Azure Runbook,通过混合工作器调用psql工具,向兼容PostgreSQL的Azure Cosmos DB插入数据
问题描述

插入包含瑞典字符å、ä、ö的数据时,数据库中这些字符会变为问号(例如"Fjäril"变为"Fj?ril")。但直接在混合工作器所在VM上用同一账号运行完全相同的代码、使用相同数据/库/表结构时,字符显示正常。
Runbook中插入前用Write-Output输出数据到日志,åäö字符显示正常。未使用子Runbook,单独测试Runbook仍出现该问题。
涉及的psql执行代码:

"INSERT INTO $Schema.$table 
 VALUES('$Guid','$Givenname','$Username','$Surname','$Name');"  | & "$psqlpath\psql" --csv $dburl -c 
已尝试的排查措施
  • 确认数据库采用UTF-8编码
  • 在psql命令中添加SET client_encoding = 'UTF8';设置编码
  • 将混合工作器所在VM的系统区域设置为UTF-8
解决方案建议
  1. 强制PowerShell输出UTF-8编码
    Azure Runbook的PowerShell环境默认输出编码可能不是UTF-8,导致管道传递给psql的文本编码错误。可在输出SQL语句前设置输出编码:
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::UTF8

或直接生成UTF-8编码的SQL字符串传递:

$sql = "INSERT INTO $Schema.$table VALUES('$Guid','$Givenname','$Username','$Surname','$Name');"
$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($sql)
$utf8Sql = [System.Text.Encoding]::UTF8.GetString($utf8Bytes)
$utf8Sql | & "$psqlpath\psql" --csv $dburl -c
  1. 通过psql命令行参数指定编码
    除了在SQL中设置client_encoding,可直接通过psql参数强制指定客户端编码:
"INSERT INTO $Schema.$table 
 VALUES('$Guid','$Givenname','$Username','$Surname','$Name');"  | & "$psqlpath\psql" --csv --encoding=UTF8 $dburl -c 
  1. 检查并统一Runbook执行环境编码
    混合工作器的Runbook执行会话编码可能与交互式登录不同,可在Runbook中添加代码输出当前编码确认问题:
Write-Output "控制台输出编码: $([Console]::OutputEncoding)"
Write-Output "控制台输入编码: $([Console]::InputEncoding)"
Write-Output "系统默认编码: $([System.Text.Encoding]::Default)"

若输出非UTF-8,在Runbook开头统一设置编码:

[Console]::InputEncoding = [System.Text.UTF8Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::UTF8
  1. 使用参数化查询避免编码与注入问题
    直接字符串插值可能引发编码转换问题,建议用psql参数化查询替代:
$sql = "INSERT INTO $Schema.$table (guid, givenname, username, surname, name) VALUES (@guid, @givenname, @username, @surname, @name);"
& "$psqlpath\psql" --csv $dburl -c $sql -v guid='$Guid' -v givenname='$Givenname' -v username='$Username' -v surname='$Surname' -v name='$Name'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:24