加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql+postgis字符集问题

发布时间:2020-12-13 17:36:14 所属栏目:百科 来源:网络整理
导读:继续遇到新的问题: 研发反应,无法创建基于Utf8的数据库。 研究了一下,原来是因为Initdb过程中,没有手工指定locale参数,结果命令就自动从env中提取了zh作为默认的locale参数,与之相关的有lc_ctype和lc_collate两项参数等于zh。这样的情况下,数据库为了

继续遇到新的问题:

研发反应,无法创建基于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文件,后重启数据库集群,来调整。暂时不明白有什么深刻的影响。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读