MySQL-VARCHAR Längen und UTF-8
In MySQL, wenn ich eine neue VARCHAR(32)
Feld in einer UTF-8 Tabelle bedeutet das ich speichern kann 32 Byte an Daten in dem Feld oder 32 Zeichen (Multibyte -)?
Ich Tat es nicht. Denken Sie, ich sollte?
Ich weiß es nicht.) Es ist Ihre Frage, und es ist bis zu Ihnen. Ich wollte nur sagen, dass "eine andere Antwort sieht mehr abzuschließen".
Die bisherige akzeptierte Antwort war einfach und korrekt. Aber auf Nachfrage habe ich akzeptiert, die Sie wollen.
Ich weiß es nicht.) Es ist Ihre Frage, und es ist bis zu Ihnen. Ich wollte nur sagen, dass "eine andere Antwort sieht mehr abzuschließen".
Die bisherige akzeptierte Antwort war einfach und korrekt. Aber auf Nachfrage habe ich akzeptiert, die Sie wollen.
InformationsquelleAutor Alix Axel | 2010-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Antwort zeigte sich an der Spitze meiner google-Suche ergibt aber nicht richtig so:
Die Verwirrung ist wahrscheinlich aufgrund der unterschiedlichen mysql-Versionen getestet.
http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html
Interessanterweise (ich hatte nicht gedacht, es) die maximale Länge einer varchar-Spalte betroffen ist, indem Sie den utf-8 wie folgt:
utf8mb4
) speichern können "??????????" (10 Stapel von poo), das sind 10 Zeichen, aber 40 bytes.Diese. Dies ist die einzige richtige Antwort. Viel zu viele Menschen glauben, dass die version 4 Verhalten als Evangelium.
Die akzeptierte Antwort ist auch korrekt für MySQL 5 -- die zahlen eingefügt wurden tatsächlich Teil der vollen Breite der char-set und multi-byte-unicode-Zeichen, wie auch erwähnt der Verfasser, dass er eingefügt "32 multibytes Daten". Es ist eine Schande, dass so viele Menschen missverstanden.
Die Nennung der folgenden Quelle, ich glaube, dass ein utf8-Zeichen erfordert derzeit bis zu 6 bytes, also irgendwo zwischen 1 und 6 bytes. Dies bewirkt, dass der Schlimmste Fall für einen Charakter maximal zu 10922. Ich denke. joelonsoftware.com/articles/Unicode.html
InformationsquelleAutor M Brown
es würde Sie store-32 multi-byte-chars
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html
CHAR
und wenn ich es Tue es ist nicht vorgesehen zum speichern von multi-byte-Zeichen, also bin ich mir sicher. WasVARCHAR
, sind Sie sicher, dass der Grenzwert definiert ist, die in den multi-byte-chars und nicht auf single-byte-chars?ja varchar scheint so gut funktionieren
UTF-8 verwendet eine maximal 4 Byte pro Zeichen, nicht 3. Oder ist MySQL-support nicht alle 4 bytes?
Sie sind Recht utf8, aber nicht für MySQL. Die verschiedenen utf8_xxx Charakter-sets sind 3-byte-maximal. Die utf8mb4_xxx 4 byte-Zeichen. dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
InformationsquelleAutor jspcal
32 multibytes Daten für
varchar(32)
mit Sortierungutf8_unicode_ci
ich gerade getestet mit XAMPP.Abgeschnitten:
Im Hinterkopf behalten, dass diese sind keine gewöhnlichen ASCII-chars.
In UTF-8 standard-ASCII-chars werden nur dann gespeichert in einer einzigen byte - um wirklich zu testen, brauchen Sie tatsächlich nutzen einige multibyte - (ie. nicht-ascii -) Zeichen in Ihre test-sting.
Das ist falsch, zumindest für MySQL 5+. Bei der Angabe der Spalte Größe für varchar oder char, es ist hinsichtlich der Zeichen angegeben. Ich glaube, dass die tatsächliche Größe einer VARCHAR(32) Spalte wäre 32x3 1=97 bytes.
sind nicht im standard-ASCII-chars. en.wikipedia.org/wiki/...
Ich steckte 40 unicode-Zeichen in die DB, und habe Sie gekürzt auf 32 Zeichen. Aber sieht wie die Leute denken, ich benutzte ascii-bytes und gekürzt auf 32 bytes. Kein Wunder, ich habe downvotes, lol.
InformationsquelleAutor YOU
Ist es besser, verwenden Sie "char" für " high-frequent-update-Tabellen, weil die gesamte Länge der Zeile wird fixiert und schnell. Varchar-Spalten machen Zeilendaten Größen dynamisch. Das ist nicht gut für MyISAM -, aber ich weiß nicht, über InnoDB und andere. Zum Beispiel, wenn Sie eine sehr schmale Spalte "Typ", kann es besser sein, auf char(2) mit latin1 Zeichensatz nur Anspruch auf minimalem Raum.
Für MyISAM-es ist etwas - argument für
CHAR
. Für InnoDB, so viele andere Dinge auf, dass die "dynamische/statische Zeile Größe" - Debatte ist im wesentlichen irrelevant.IMHO der wichtige Punkt hier ist, dass für sehr klein Längen, kann es hilfreich sein, zu verwenden
CHAR
.InformationsquelleAutor Nudge
Wenn Sie eine Verbindung zu der Datenbank mit latin1-Kodierung (beispielsweise mit PHP) um eine PHP UTF8-string in eine MySQL UTF8-Spalte, haben Sie eine doppelte UTF8-Codierung.
Wenn der UTF8-string
$s
ist 32 Zeichen lang, aber 64 Byte lang und die Spalte istVARCHAR(32)
UTF8, die doppelte Codierung konvertieren Sie die Zeichenfolge$s
zu einer 64 Zeichen langen UTF8-string, der gekürzt in der Datenbank, um die 32 ersten Zeichen entsprechend der ersten 32 bytes der$s
. Sie können am Ende denken, dass MySQL 5 verhält sich wie MySQL 4 aber es ist in der Tat eine zweite Ursache für den gleichen Effekt.InformationsquelleAutor Laurent Lyaudet