sql >> データベース >  >> RDS >> Mysql

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

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

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

    Carnangelからの速度に関するコメントは、Unicodeドライバーの使用を延期させません。いずれにせよ、彼のコメントには事実が含まれていません。彼は次のことを言及している可能性があります:

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

    ユニコードODBCドライバーを使用してANSIODBCアプリケーション(つまり、ansi ODBC apisを使用するアプリケーション)を作成する場合、ODBCドライバーマネージャーは、ドライバーが8ビット(損失)に戻すUCS-2を変換し、8ビットを変換する必要があります。ドライバーにUCS-2に渡すデータ。だからそうしないでください。

    最近、誰かがまだANSIODBCドライバーを使用しているとしたら驚きます。



    1. PDOを使用して、UPDATEステートメントが成功したことを確認するにはどうすればよいですか?

    2. Hibernate基準を使用した左結合

    3. php警告mysql_fetch_assoc

    4. すべてのMySqlテーブルのCREATEステートメントを生成します