0

アジアの文字セットのサポートを既存のデータベースに追加するためのベスト プラクティス アプローチを探しています。latin1文字セットにある既存のテーブルがあります。

show create table books
CREATE TABLE `books` (
  `id` varchar(255) NOT NULL,
  `category` varchar(255) default NULL,
  `contactEmail` varchar(255) default NULL,
  `description` text,
  `price` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1

description現在、フィールドに UTF8 文字を入力すると、 「?」が返されます。往復のアジア文字の chars。Latin1 文字は問題なく動作します。

このテーブルをこのようなもので単純に変換できますか?

ALTER TABLE books CONVERT TO CHARACTER SET utf8

これにより、テーブルに既に存在するデータが魔法のように修正されるわけではないことを理解しています。今後の新しいデータに対して適切に機能するようにしたいだけです。

照合について心配する必要はありますか? それが非ラテン文字でどのように機能するかはわかりません。

utf8データベースのデフォルトを作成することは理にかなっていますか? その際の注意事項はありますか?

ありがとう

4

2 に答える 2

0

あなたが戻ってきているという事実 '?' これは、Latin-1 に存在しない文字が置換文字に適切に変換されたことを示唆しているため、良い兆候です。データを変換するプロジェクトに着手する前に、そこにあるすべてが正常であることを確認してください。これは、データベースに書き込むアプリケーションとプログラミング言語が複数ある場合に特に重要です。

大まかな健全性チェックを行う最も簡単な方法の 1 つは、バイト長に対して文字長をチェックすることです。

SELECT length(foo), char_length(foo) FROM bar

最初の戻り値は文字列の長さ (バイト単位) で、2 番目は文字列のさ (文字単位)です。そこに何らかのマルチバイト文字がある場合、これら 2 つの値は異なります。

インターネット上には変換に関する非常に多くのガイドがあり、そのうちの1 つが特に非常に役立つことがわかりました。

于 2012-05-01T07:04:31.177 に答える
0

MySQL が文字セットを処理する方法についてはあまり経験がありませんが、文字セット全般については経験があります。

現在、説明フィールドに UTF8 文字を入力すると、「?」が返されます。往復のアジア文字の chars。Latin1 文字は問題なく動作します。

テーブルはlatin1エンコードに使用しているため、latin1 文字セットに存在する文字のみを格納できます。Latin1 は ISO-8859-1 の省略形です。どの文字が含まれているかを確認できます— アジアの文字がないため、保存されません。MySQL がそのような入力でエラーにならないことに少し驚いています。

データベースのデフォルトを utf8 にするのは理にかなっていますか? その際の注意事項はありますか?

複数の言語の文字を保存する必要がある場合は、UTF-8 が適しています。Unicode エンコーディングとしての UTF-8 を使用すると、多くの言語の任意の Unicode 文字 (文字通り何千もの文字があります) を格納できます。UTF-8 を使用して、文字列 "Dog café θλφ 你好" を格納できます。UTF-8 は広く使用されており、ほぼすべてのものをエンコードできます。これを強くお勧めします。

インターネットを熟読して、MySQL テーブルの変換に関する文献を見つけ、問題がないことを確認します。これが本番データの場合は、オフライン データセット (開発テーブルまたは QA テーブル) でテストします。

最後に、DB に半保存されたアジア文字があることを示しているようです。正確に何が格納されているかを把握します。アジア文字の UTF-8 シーケンスであるが、データベースが latin1 ( mojibakeの典型的なケース) であると認識している場合、ある程度の回復が可能である可能性があります。変換によって、UTF-8 コード単位が latin1 であるかのように変換され、非常に興味深い出力が得られるのではないかと心配です。テスト テスト テスト。

于 2011-04-01T21:52:39.047 に答える