将.sql导入Postgresql时得到错误的字符编码

问题描述 投票:0回答:1

我正在使用此命令行将大型.sql数据集导入到postgresql:

psql -h localhost -U postgres -d postgres -q -f C:\andb\pgrouting\osm2po-5.0.0\dk\dk_2po_4pgr.sql

我正在数据库中获取表,但是字符串不能正确显示'æ','ø'和'å'。当我在.sql文件中查找这些字符时。例如

.sql:       "Pærevænget"
postgresql: "Pærevænget"

将.sql导入postgresql时,是否有一种方法来获取正确的字符编码?

(使用其他方法导入的数据库中的其他表没有此问题)

sql postgresql import character-encoding
1个回答
0
投票

创建新数据库时,PostgreSQL实际上会复制默认提供的数据库template1。

这意味着,当您从转储中创建数据库时,postgresql将采用template1数据库的编码,除非您告诉他不要这样做,这可能是您的问题。

解决方案是用这种方式创建数据库(用数据库的实际名称替换you_db_name:]

psql -h localhost -U postgres -d template1 -c "CREATE DATABASE your_db_name WITH OWNER postgres ENCODING 'UTF8' TEMPLATE template0"

使用template0允许您从“原始”数据库开始并自行设置编码。有了这个,您的数据库将使用最标准的UTF-8编码,并且应该与给您带来麻烦的字符一起使用。然后,您可以继续进行备份,但是可以使用之前创建的数据库来代替使用postgres数据库:

 psql -h localhost -U postgres -d your_db_name -q -f C:\andb\pgrouting\osm2po-5.0.0\dk\dk_2po_4pgr.sql

希望有帮助!

编辑:

模板部分的参考:Postgresql templates

您可以使用psql -l查看包含其编码的数据库列表!

© www.soinside.com 2019 - 2024. All rights reserved.