如何将postgreSQL中的db转换为utf8?

时间:2012-01-10 16:23:00

标签: database postgresql encoding utf-8

我刚刚为我的项目在postgreSQL中安装了一个db,并且意识到它是用SQL_ASCII编码的,这意味着我认为“没有编码”。

那么将此转换为utf8的最简单方法是什么?我知道db应该在latin1中,转换是否会损坏内容?

谢谢!

4 个答案:

答案 0 :(得分:14)

转换为UTF8不应该损坏您的数据,因为(我相信)SQL_ASCII中的所有字符也存在于utf8中;他们只有不同的字节码。

您最好的办法是重建数据库。即转储它,创建一个utf8数据库,然后将转储恢复到该新数据库。

postgres pg_dump --encoding utf8 main -f main.sql
createdb -E utf8 newMain
psql -f main.sql -d newMain

当您对新的UTF8数据与您的数据匹配感到满意时,您当然可以重命名数据库。

答案 1 :(得分:3)

我决定使用这些命令;

1-)导出

pg_dump --username=postgres --encoding=ISO88591 database -f database.sql

之后

2-)导入

psql -U postgres -d database < database.sql

这些命令帮助我解决了转换SQL_ASCII - UTF-8

的问题

答案 2 :(得分:3)

UTF-8转换完全是关于在非UTF-8数据库中保存的字符类型:根据数据,建议的解决方案可能会失败。 我设法使用重新编码(GNU项目中的一个小工具,允许您即时更改给定文件的编码)跟随此tutorial转换我的,然后我出现了有了这个:

pg_dump -v --encoding utf8 -Fc -Z9 -c -f origindb.sql.bin iso8859-1-db

pg_restore origindb.sql.bin | recode iso-8859-1..u8 | psql --dbname utf8converteddb

答案 3 :(得分:0)

我搜索整个互联网寻找这个问题的解决方案,上面的Koyots解决方案在浪费了无数个小时尝试将旧的SQL_ASCII数据库迁移到新的UTF8数据库之后第一次工作

扩展解决方案......

  • 我首先将所有网站重定向到维护页面
  • 通过将“_ascii”附加到它的名称来重命名数据库,以确保没有任何东西可以连接到它,所以我知道之后这是原始数据库!!
  • 创建一个新的utf8数据库,并在名称后附加“_utf8”(将TEMPLATE = template0附加到CREATE DATABASE STATEMENT)
  • 备份ascii数据库
  • 将备份还原到新的utf8数据库
  • 将utf8数据库重命名为我之前命名的数据
  • 检查数据库总大小与原始数据库的大小大致相同。由于死元组等不完全匹配。根据填充因子等,新数据库应该更小。
  • 关闭网站重定向
  • 测试所有网站

我建议保留这两个数据库几周,直到您确定没有丢失任何数据(假设您可以节省磁盘空间)