2014-09-17 4 views

Antwort

15

Zunächst soll ich sagen, dass ich verwende MySQL nicht, aber ich weiß über ODBC-Treiber. In ODBC gibt es verschiedene APIs für Unicode und Ansi. Die APIs von ansi enden in A und die Unicode-APIs enden in W (z. B. SQLPrepareA und SQLPrepareW). Die ANSI-APIs akzeptieren Bytes/Oktetts für Zeichenketten und können daher nur die Chrs 0-255 verarbeiten. Die Unicode-APIs akzeptieren SQLWCHARs, die 2 Byte UCS-2-codierte Unicode-Codepunkte sind (neuere MS SQL Server-Versionen können UTF16-codierte Strings verarbeiten) und können daher ungefähr die ersten 65000 Codepunkte in Unicode verarbeiten.

Wenn Sie also Unicode-Daten speichern müssen, haben Sie keine Wahl, welchen Treiber Sie verwenden möchten.

Ich würde nicht lassen Sie die Kommentare zu Geschwindigkeit aus Carnangel Sie mit dem Unicode-Treiber abschrecken und auf jeden Fall seine Kommentare enthalten keine Fakten. Er bezieht sich möglicherweise auf:

Wenn Sie Unicode-Daten in MySQL speichern, wird es UTF-8 codiert und über Ihr Netzwerk als UTF-8 übertragen. Auf der Client-Seite muss der ODBC-Treiber die UTF-8-codierten Daten in UCS-2 konvertieren, da dies ODBC benötigt. Offensichtlich gilt das Gegenteil.

Wenn Sie eine ANSI-ODBC-Anwendung (die die ANSI-ODBC-API verwendet) mit einem Unicode-ODBC-Treiber schreiben, dann muss der ODBC-Treibermanager die UCS-2 konvertieren, der Treiber kehrt zu 8 Bit (verlustbehaftet) zurück wandeln Sie die 8-Bit-Daten, die Sie an den Treiber übergeben, in UCS-2 um. Also tu das nicht.

In diesen Tagen würde ich überrascht sein, wenn jemand noch ANSI ODBC-Treiber verwendet.

3

Wie Sie vielleicht wissen, werden Ansi und Unicode auf den Datentyp angewendet. Sie können wählen, das eine oder andere, es ist keine Frage des Prozessors Hier ist der Unterschied zwischen ihnen: - Unicode können Sie alle Zeichen Eigenschaften aktiviert haben, aber Verringerung der rohen Geschwindigkeit Behandlung - Ansi, das Gegenteil, weniger Zeichen Geben Sie aber rohe Geschwindigkeitsbehandlung beschleunigen

Wenn Sie ein neuer Benutzer sind, nehmen Sie den Unicode, wenn nicht, können Sie den Ansi einen wählen.

Ich hoffe, dass Sie den Punkt haben;)

+0

was ist rohe geschwindigkeitsbehandlung? –

+0

Grundsätzlich ist es die Zeit, Daten zu lesen, und damit die Zeit der Daten erscheint. Angenommen, Sie zwei Projekte haben: Eines, in dem Sie bekam ve zwei Tabellen mit relativ wenigen Daten Die andere, in denen es 50 Tische und eine Menge Daten Wenn in beiden Fällen Sie „Wählen Sie * aus 'table' " -der erste wird die Daten wirklich schnell lesen (hohe Rohgeschwindigkeit) - Der zweite dauert eine längere Zeit, um die Tabellendaten zu lesen (weniger rohe Geschwindigkeit) – Carnangel

Verwandte Themen