7

Railsアプリケーションで使用されるMySQLデータベースには、現在、デフォルトの照合がありlatin1_swedish_ciます。utf8_general_ciRailsアプリケーション(私のものを含む)のデフォルトの文字セットはUTF-8であるため、データベースで照合を使用するのが賢明なようです。

私の考えは正しいですか?

そうだとすると、照合とデータベース内のすべてのデータを新しいエンコーディングに移行するための最良のアプローチは何でしょうか?

4

4 に答える 4

4

UTF-8 は、他の Unicode エンコーディング スキームと同様に、任意の言語で文字を格納できるため、データベースのコードページとして最適です。

一方、照合設定は、エンコード方式とはまったく別の問題です。これには、並べ替え順序、大文字/小文字の変換、文字列の等価性の比較、および言語固有のものが含まれます。照合設定は、データベースで使用されている言語と一致する必要があります。

UTF-8 の一般的な照合順序は (ここでは想定していますが、特に MySQL には詳しくありません)、言語が不明で、単純なデフォルトの順序付けが必要な場合に使用されます。これはおそらく Unicode コード ポイントの順序に対応していますが、これは、スウェーデン語を保存している場合に必要とされるものではないことはほぼ確実です。

于 2008-10-13T15:24:19.380 に答える
1

文字セットとして UTF-8 に変換します。

照合設定は、並べ替えなどにのみ使用されます。ほとんどのユーザーが期待する照合順序を選択してください。

于 2008-10-13T14:52:04.937 に答える
1

データベース内の既存のデータが latin1 で正しくエンコードされている場合、テーブルを utf8 に変換 (ドキュメントで説明されているように ALTER TABLE を使用) するだけで機能します。

その後、アプリケーションが行う必要があるのは、以前と同じことを続行することだけです。アプリケーションで Unicode 文字を使用したい場合は、接続エンコーディングを utf8 に設定して utf8 を使用する必要がありますが、それはそれ自体の問題です。


問題は、多くのがらくた Web アプリが歴史的に utf8 データを mysql に送信し、それを latin1 として扱うように指示してきたことです。MySQL はこれを完全に尊重し、指示に従ってジャンクをテーブルに保存します。

テーブルを latin1 から utf8 に変換しても、この間違いは修復されません。それらを修復することは簡単ではありません。特に、アプリの存続期間中にデータベースに対してさまざまな種類のゴミを話している場合はなおさらです。

于 2008-10-13T20:14:31.540 に答える
0

以下の mysql クエリを使用して、列を変換します。

ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

テーブルの詳細を表示するには:

SHOW FULL COLUMNS FROM users;
于 2016-09-26T11:57:14.400 に答える