web-dev-qa-db-ja.com

MySQLのANSIドライバーとUnicodeドライバーの違い

WindowsでODBC(64ビット)]の下にあるデータソースを選択すると、MySQLデータベースの2つの利用可能なオプションが表示されます。

  • MySQL ODBC 5.3 ANSIドライバー
  • MySQL ODBC 5.3 Unicodeドライバー

これら2つの違いは何ですか?

29
Malwinder Singh

まず、MySQLを使用しないと言いますが、ODBC Drivers。In ODBCには、UnicodeとANSIの異なるAPIがあります。ANSI APIはAで終わり、Unicode APIはWで終わります(SQLPrepareAおよびSQLPrepareWなど)。ansiAPIは文字列のバイト/オクテットを受け入れるため、chrs 0〜255のみを処理できます。UnicodeAPIは2バイトUCS- 2つのエンコードされたUnicodeコードポイント(新しいMS SQL ServerバージョンはUTF16エンコードされた文字列を処理できます)。したがって、Unicodeの最初の約65000コードポイントを処理できます。

したがって、Unicodeデータを保存する必要がある場合は、使用するドライバーを選択する必要はありません。

Carnangelからの速度に関するコメントに、Unicodeドライバーを使用して先送りすることはできません。いずれにしても、彼のコメントには事実が含まれていません。彼は言及しているかもしれません:

MySQLにUnicodeデータを保存すると、UTF-8でエンコードされ、ネットワーク上でUTF-8として転送されます。クライアント側でODBCドライバーはUTF-8でエンコードされたデータをUCS-2に変換する必要があります。これはODBCが必要です。明らかに逆が適用されます。

ANSI ODBCアプリケーション(つまり、ansi ODBC apis)を使用するもの)とUnicode ODBCドライバODBCドライバーマネージャーは、ドライバーが返す8ビット(損失のある)UCS-2を変換し、ドライバーに渡す8ビットデータをUCS-2に変換する必要があります。それをしません。

最近、ANSI ODBCドライバーをまだ使用している人がいる場合、私は驚くでしょう。

20
bohica

ご存知かもしれませんが、Ansiとunicodeはデータの文字型に適用されます。どちらかを選択できますが、プロセッサの問題ではありません。それらの違いは次のとおりです。治療はスピードアップします

新規ユーザーの場合はUnicodeを使用し、そうでない場合はAnsiを選択できます。

あなたがポイントを持っていることを願っています;)

4
Carnangel