2011-04-05 14 views
1

私たちのデータベースでは、文字セット "utf8 - UTF-8 Unicode"と照合 "utf8_general_ci"を使用していますが、テーブルとカラムのほとんどはCHARSET = latin1を使用しています。私はこれに何か問題に遭遇するでしょうか?mySQL文字セット

私は、2つのデータベース間でデータを同期する際に多くの問題が発生しているためです。

答えて

2

http://mysqldump.azundris.com/archives/60-Handling-character-sets.html

に、たとえばサーバーを読んで、スキーマ/データベースとテーブルが何の文字セットを持っていない、彼らは下向きに継承されているだけで、デフォルト(テーブルへのスキーマへのサーバー)を持っています。 CHAR、VARCHARまたは任意のTEXT型の列は、文字セットを持ち、列ごとにそれを行います。特定の文字セットが定義されていない場合は、テーブルから継承されます。

これらのすべてのオブジェクトの継承は、オブジェクトの作成時に行われます。

文字セットを持つ他のものは接続です。接続はサーバーがクライアントについて知っているものの集合なので、接続の文字セットはクライアントで使用している文字セットに設定する必要があります。

MySQLは、列の文字セットと接続の文字セットを正しく変換します。通常、それに問題はありません。

PEOPLEはサーバーに横たわっていること、つまり、クライアントの実際の送信または使用とは異なる接続に文字セットを設定することが最も一般的な問題です。これは実行時に接続設定の最初のコマンドとしてSET NAMES ...というコマンドを送信することで実行できます。ここで正しいことを指定することが非常に重要です。

latin1データをSET NAMES latin1の接続に送信すると、latin1カラムにデータを格納してもデータは変換されませんが、utf8カラムにデータを格納するとlatin1ウムラウト(ö= F6)ディスク上のutf8ウムラウト(ö= C3 B6)にコピーします。接続が正しく設定されていれば、読書は透明に戻って変換されます。

設定では、接続がSET NAMES utf8で、latin1列にデータを送信している場合は、latin1で表現できるデータのみを格納できます。このようなlatin1の列に日本語のひらがなを格納しようとすると、データの切り捨てとデータ切り捨ての警告が表示されます。

0

messignを使った私の経験MySQLの文字セットは、文字列の100%機能的ソートではありませんでした。 UTF-8のすべてを安全面に置くことをお勧めします。

実際にその列に格納されている内容によって異なると思います。 UTF-8マルチバイト文字をlatin-1 charsetの列に格納すると、ソートの問題が発生する可能性があります。しかし、EN/US文字だけがある限り、あなたは大丈夫です。

0

「国際的な」テキスト(つまり非ラテン文字)を保存する可能性がある場合は、問題が発生します。

私はあなたが「再正しく掲示するものを理解していれば、これはあなたのデータベースの新しいテーブル用のデフォルトはUTF-8ですが、あなたの既存テーブルはラテン-1を使用することを意味します。それは問題になる可能性があります。上記のように、あなたのデータに依存します。 MySQLの文字セットの概要については

関連する問題