postgresql+postgis字符集问题

前端之家收集整理的这篇文章主要介绍了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文件,后重启数据库集群,来调整。暂时不明白有什么深刻的影响。

猜你在找的Postgre SQL相关文章