微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql+postgis字符集问题

继续遇到新的问题:

研发反应,无法创建基于Utf8的数据库

研究了一下,原来是因为Initdb过程中,没有手工指定locale参数,结果命令就自动从env中提取了zh作为认的locale参数,与之相关的有lc_ctype和lc_collate两项参数等于zh。这样的情况下,数据库为了避免编码匹配带来的问题,就不允许创建基于utf8的数据库了,只能创建基于euc_cn的数据库

因为是空的数据库集群,就删除了创建的data目录,重新创建data目录,重新initdb,加参数 --locale=C,果然,这次创建数据库集群和模板数据库过程中就看到提示说Locale设置为C,以为就此大功告成,结果尝试创建一个数据库createdb -E utf8 ***** 再次报错。提示说模板数据库的encoding采用了ancii编码,也不允许采用utf8。

再次重新创建data目录,重新initdb,加参数 -E utf8,之后一路顺利下来,没有再出现问题了。。。。

总结:

initdb -D /path/to/data -E utf8 --locale=C

create -E utf8 databasename

数据库集群中,模板非常重要,每次创建一个库,都要copy模板中众多的参数过去,所以创建模板要注意。基于postgis的模板也是同样的道理。

另外,还有两个参数lc_message='C'和lc_monetary='C',也是可以在initdb过程中手工设置的,若不写,则缺省提取env的值。不过这两个参数可以后期修改/data/postgres.conf文件,后重启数据库集群,来调整。暂时不明白有什么深刻的影响。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐