2012-01-16 31 views
9

我有一個數據庫是uft8_general_ci,唯一的問題是,直到這一點,由以前的開發人員編寫的應用程序似乎一直在使用拉丁語-1數據庫。latin-1到utf-8數據庫

我已經改變了應用程序使用數據庫的方式,現在可以將變音符存儲爲元音變音而不是ü。現在的問題是,應用程序從數據庫讀取以前存在的數據(例如)「Süddeutsche」而不是「Süddeutsche」。

有沒有辦法將數據庫中的數據從一種格式轉換爲另一種格式?

問候

編輯:

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; 

這爲我工作。

+0

[如何修正坐在MySQL utf8_general_ci字段中的雙重編碼的UTF-8字符串?](http://stackoverflow.com/questions/5951871/how-to-correct-double-encoded-utf-8 -strings-sitting-in-mysql-utf8-general-ci-fie) – 2012-01-16 12:22:53

+0

謝謝,不太一樣,但答案的作品! – mr12086 2012-01-16 13:38:16

+0

經過一些測試,如果我在某些列上運行這個2x,數據將會中斷 - 特定字符/點之後的所有數據都會丟失。這是因爲我運行了2倍的命令,還是因爲整個數據庫中有大量數據發生了變化? – mr12086 2012-02-17 12:37:45

回答

2

你可以嘗試SET NAMES讓在latin-1數據庫Talk與您的應用程序,同時在utf-8存儲或你需要將所有以前的數據集轉換爲utf-8 -Strings

2

嘗試

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'; 

別忘了更換'ß':

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