使用pg_dump将Postgres从Windows迁移到Linux时如何选正确的数据库排序规则
你的推测完全正确,en_ZA.UTF-8就是Linux环境下和Windows English_South Africa.1252 匹配的等效UTF8排序规则。
如何查询Linux环境下的对应等效排序规则
1. 先校验系统层面是否已安装对应locale
执行以下命令查询系统已生成的区域规则:locale -a | grep -i "en_ZA"
如果输出中存在en_ZA.utf8或en_ZA.UTF-8(不同Linux发行版命名格式略有差异,数据库侧可通用识别),说明系统已支持对应规则。如果没有返回结果,需要手动生成对应locale:
- Debian/Ubuntu 系列:执行
dpkg-reconfigure locales,在列表中勾选en_ZA.UTF-8确认生成即可 - RHEL/CentOS 系列:执行
localedef -i en_ZA -f UTF-8 en_ZA.UTF-8手动生成
2. 校验数据库侧支持的排序规则
以你使用的PostgreSQL为例,连接数据库后执行以下查询,筛选编码为UTF8的南非英语相关排序规则:
SELECT collname FROM pg_collation WHERE collname ILIKE '%en_ZA%' AND collencoding = pg_char_to_encoding('UTF8');
返回结果中的en_ZA.UTF-8就是你迁移时可以直接使用的目标排序规则。
迁移前校验建议
可以先在目标测试库创建两张测试表,分别用源库和目标库的排序规则创建字符类型字段,插入相同的带特殊字符、大小写混合的字符串做排序对比,确认两组排序结果完全一致后再正式启动迁移任务,避免出现排序逻辑不符合预期的问题。
内容的提问来源于stack exchange,提问作者kishore_pg
相关产品推荐
相关产品推荐

