私はすべてのテーブルフィールドの照合を含むMySQLデータベースを持っています
latin1_swedish_ci
すでに1000件近くのレコードが保存されているので、これらすべてのデータを
utf8_general_ci
そのため、あらゆる言語コンテンツを表示できます。私はすでにフィールド照合をtf8_general_ciに変更しましたが、これは[〜#〜] convert [〜#〜]すべての古いレコードをtf8_general_ciに変更しません=
一つ面白いこと。
テーブルの文字セットが適切なエンコーディングである場合、Anshuによって提案されたCONVERT TO CHARSETおよびCONVERT()/ CAST()は正常に動作します。
何らかの理由でlatin1列にutf8テキストが含まれている場合、CONVERT()およびCAST()は役立ちません。私はデータベースをその設定で「混乱」させていたので、これを解決するためにもう少し時間をかけます。
文字セット変換に加えてこれを修正するには、いくつかの演習が必要です。
_INSERT INTO UTF8_TABLE (UTF8_FIELD)
SELECT convert(cast(convert(LATIN1_FIELD using latin1) as binary) using utf8)
FROM LATIN1_TABLE;
_
基本的に、どちらの場合も、文字列を元のシンボルに処理し、次に正しいエンコーディングに処理します。これは、simple convert(field using encoding) from table;
コマンドでは発生しません。
テーブルをエクスポートします。テーブルを削除します。エクスポートファイルをエディターで開きます。テーブル構造が作成された場所で手動で編集します。
古いクエリ:
CREATE TABLE `message` (
`message_id` int(11) NOT NULL,
`message_thread_id` int(11) NOT NULL,
`message_from` int(11) NOT NULL,
`message_to` int(11) NOT NULL,
`message_text` longtext NOT NULL,
`message_time` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
新しいクエリ:(message_textフィールドを変更するとします。)
CREATE TABLE `message` (
`message_id` int(11) NOT NULL,
`message_thread_id` int(11) NOT NULL,
`message_from` int(11) NOT NULL,
`message_to` int(11) NOT NULL,
`message_text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`message_time` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ファイルを保存して、データベースにインポートします。