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

如何在Azure PostgreSQL中创建使用en_GB.utf8区域设置的数据库?

解决Azure PostgreSQL创建数据库时Locale与编码不匹配的问题

问题分析

你执行的CREATE DATABASE语句指定en_GB.utf8作为LC_COLLATE和LC_CTYPE,同时使用UTF8编码,报错提示该Locale需要LATIN9编码——这是因为Azure托管的PostgreSQL服务器上,libc提供的en_GB.utf8 locale实际绑定的编码是LATIN9,无法与UTF8兼容。另外pgAdmin GUI仅显示有限Locale选项,是因为GUI只会列出与当前环境编码兼容的可用选项。

解决方案

1. 切换为ICU提供的Locale(推荐)

Azure PostgreSQL灵活服务器默认使用ICU作为Locale提供器,ICU的Locale命名格式为en-GB,且天然支持UTF8编码,修改后的创建语句如下:

CREATE DATABASE my_db
    WITH
    OWNER = admin
    ENCODING = 'UTF8'
    LC_COLLATE = 'en-GB'
    LC_CTYPE = 'en-GB'
    LOCALE_PROVIDER = 'icu'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;

2. 验证服务器可用Locale及编码

先查询服务器上en_GB相关Locale的编码兼容性,确认是否存在可搭配UTF8的选项:

SELECT collname, collencoding FROM pg_collation WHERE collname LIKE 'en_GB%';
  • collencoding为6对应UTF8,若存在此类记录,可尝试去掉LOCALE_PROVIDER = 'libc'参数后重新执行创建语句;
  • 若结果中en_GB.utf8对应的collencoding为11(LATIN9),则无法与UTF8混用,需放弃该Locale或改用LATIN9编码(不推荐,UTF8通用性更强)。

3. 关于pgAdmin GUI显示限制

pgAdmin的Locale选项列表由服务器端返回的兼容选项决定,解决编码与Locale的兼容问题后,新创建的数据库在设置排序规则时,对应兼容的Locale会自动显示在GUI中;也可直接通过SQL语句指定Locale,绕过GUI的选项限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:54:55