我刚刚为我的项目在postgreSQL中安装了一个db,并且意识到它是用SQL_ASCII编码的,这意味着我认为“没有编码”。
那么将此转换为utf8的最简单方法是什么?我知道db应该在latin1中,转换是否会损坏内容?
谢谢!
答案 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数据库之后第一次工作
扩展解决方案......
我建议保留这两个数据库几周,直到您确定没有丢失任何数据(假设您可以节省磁盘空间)