2012-01-16 11 views
9

Tôi có một cơ sở dữ liệu là uft8_general_ci, chỉ có vấn đề là cho đến thời điểm này một ứng dụng được mã hóa bởi một nhà phát triển trước đó dường như đã làm việc với cơ sở dữ liệu trong latin-1.latin-1 to utf-8 cơ sở dữ liệu

Tôi đã thay đổi cách ứng dụng sử dụng cơ sở dữ liệu và giờ đây có thể lưu trữ một âm sắc thay vì ü. Vấn đề bây giờ là ứng dụng đọc dữ liệu đã tồn tại trước đó từ cơ sở dữ liệu như (ví dụ) 'Süddeutsche' thay vì 'Süddeutsche'.

Có cách nào để chuyển đổi dữ liệu bên trong cơ sở dữ liệu từ định dạng này sang định dạng khác không?

Trân

Edit:

ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET latin1; 
ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET binary; 
ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET utf8; 

này đã làm việc cho tôi.

+0

bản sao có thể có của [Cách sửa các chuỗi UTF-8 được mã hóa kép nằm trong các trường MySQL utf8_general_ci?] (Http://stackoverflow.com/questions/5951871/how-to-correct-double-encoded-utf-8 -strings-sitting-in-mysql-utf8-general-ci-fie) –

+0

Cảm ơn bạn, không hoàn toàn giống nhau nhưng câu trả lời hoạt động! – mr12086

+0

Sau một số thử nghiệm nếu tôi chạy 2x này trên một số cột của tôi, dữ liệu sẽ bị hỏng - tất cả dữ liệu sau khi một ký tự/điểm cụ thể bị mất. Điều này đơn giản chỉ vì tôi đã chạy lệnh 2x, hoặc có sự thay đổi rất nhiều dữ liệu của tôi trên toàn bộ cơ sở dữ liệu? – mr12086

Trả lời

2

Bạn có thể thử SET NAMES để cho cuộc nói chuyện Cơ sở dữ liệu trong latin-1 với ứng dụng của bạn khi lưu trữ trong utf-8 hoặc bạn sẽ cần phải chuyển đổi tất cả các Datasets trước để utf-8 -Strings

2

thử

ALTER DATABASE your_db DEFAULT CHARACTER SET = 'utf8' COLLATE 'utf8_unicode_ci'; 

ALTER TABLE a CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 

ALTER TABLE b CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 
ALTER TABLE c CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 

đừng quên thay thế 'ß':

UPDATE a SET field_1 = REPLACE(field_1, 'ß', 'ss') WHERE label LIKE '%ß%';