2012-01-16 9 views
9

私はuft8_general_ciというデータベースを持っていますが、これまでの開発者によってコード化されたアプリケーションはlatin-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) –

+0

ありがとう、全く同じではありませんが、答えはうまくいきます! – mr12086

+0

いくつかのテストの後で、私のカラムのいくつかでこの2倍を実行すると、データが破損します - 特定の文字/ポイントの後のすべてのデータが失われます。これは単純に2xのコマンドを実行したか、またはデータベース全体に多くのデータが失われているためですか? – mr12086

答えて

2

あなたはutf-8に格納しながら、アプリケーションでlatin-1でのデータベースの話を聞かせするSET NAMESを試みることができるかやってみ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 '%ß%'; 
関連する問題