2012-01-10 45 views

Trả lời

9

Chuyển đổi sang UTF8 sẽ không làm hỏng dữ liệu của bạn vì tôi tin rằng không có ký tự nào không dịch.

Đặt cược tốt nhất của bạn là xây dựng lại cơ sở dữ liệu của bạn, đó là đổ nó, tạo ra một cơ sở dữ liệu utf8 sau đó khôi phục kết xuất vào cơ sở dữ liệu mới đó.

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

Sau đó bạn có thể đổi tên cơ sở dữ liệu một khi bạn hài lòng với UTF8 mới khớp với dữ liệu của bạn.

+1

Tôi đã thử nhưng bước cuối cùng, khi tôi kết xuất tệp sql, nó cho tôi biết "psql: lo17_utf8.sql: 6615: ERROR: chuỗi byte không hợp lệ để mã hóa" UTF8 ": 0xe96365" – darkjh

+1

tôi nói với pg_dump để dump tôi db với utf8, nhưng khi tôi kiểm tra nó bằng cách sử dụng lệnh tập tin, nó cho tôi thấy rằng dump là trong latin1. – darkjh

+1

sau một biểu tượng, bây giờ là ok, cảm ơn. – darkjh

1

Tôi đã giải quyết bằng các lệnh này;

1-) Xuất

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

và sau

2-) Nhập

psql -U postgres -d database < database.sql 

các lệnh này giúp tôi giải quyết vấn đề của SQL_ASCII chuyển đổi - UTF-8

2

Chuyển đổi UTF-8 là tất cả về loại ký tự được lưu trong db không phải UTF-8: tùy thuộc vào dữ liệu mà giải pháp đề xuất có thể không thành công. tôi quản lý để chuyển đổi của tôi sau tutorial này, sử dụng recode (một công cụ nhỏ từ dự án GNU cho phép bạn thay đổi on-the-fly mã hóa của một tập tin nhất định) và tôi đến với điều này:

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 
0

tôi đã tìm kiếm toàn bộ internet tìm kiếm một giải pháp cho vấn đề này và giải pháp Koyots trên làm việc lần đầu tiên sau khi lãng phí vô số giờ cố gắng mọi thứ để di chuyển một cơ sở dữ liệu SQL_ASCII cũ sang một cơ sở dữ liệu UTF8 mới

để mở rộng khi các giải pháp ...

  • đầu tiên tôi chuyển hướng tất cả các trang web vào một trang duy trì
  • Đổi tên cơ sở dữ liệu bằng cách thêm "_ascii" để tên của nó chỉ để đảm bảo không có gì có thể kết nối với nó và cũng vì vậy tôi biết sau rằng đây là cơ sở dữ liệu ban đầu !!
  • Tạo một cơ sở dữ liệu utf8 mới với "_utf8ở" gắn vào tên (append TEMPLATE = template0 để câu lệnh CREATE DATABASE)
  • Sao lưu cơ sở dữ liệu ascii
  • phục hồi sao lưu cơ sở dữ liệu utf8 mới
  • đổi tên cơ sở dữ liệu utf8 quay lại những gì tôi đã đặt tên trước khi
  • Kiểm tra tổng kích thước cơ sở dữ liệu có cùng kích thước với cơ sở dữ liệu gốc. Sẽ không khớp chính xác do các bộ chết ... Cơ sở dữ liệu mới sẽ nhỏ hơn dựa trên yếu tố lấp đầy, v.v.
  • Tắt trang web chuyển hướng
  • Kiểm tra tất cả các trang web

tôi muốn đề nghị giữ cả hai cơ sở dữ liệu cho một vài tuần cho đến khi bạn chắc chắn bạn không bị mất bất kỳ dữ liệu (với điều kiện bạn có thể dành ra một số không gian đĩa)

Các vấn đề liên quan