In MySQL der OCTET_LENGTH()
Die Funktion gibt die Länge eines Strings zurück, gemessen in Bytes.
Diese Funktion ist eigentlich ein Synonym für LENGTH()
.
Syntax
Die grundlegende Syntax lautet wie folgt:
OCTET_LENGTH(str)
Wobei str
ist die Zeichenfolge, für die Sie die Länge zurückgeben möchten.
Beispiel
SELECT OCTET_LENGTH('Cat');
Ergebnis:
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
Dies ist das gleiche Ergebnis, das wir erhalten würden, wenn wir CHAR_LENGTH()
verwenden würden Funktion. Allerdings ist die OCTET_LENGTH()
Funktion kann je nach Datentyp unterschiedliche Ergebnisse zurückgeben.
Datentypen
Wenn Sie eine Datenbank abfragen, wird die OCTET_LENGTH()
Funktion kann je nach Datentyp ein anderes Ergebnis zurückgeben. Unicode-Strings geben die doppelte Anzahl von Bytes zurück. UTF-8-Strings können variieren.
Hier ist ein Beispiel für die Verwendung von UTF-8:
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Ergebnisse:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
In diesem Fall ist die Zeichenlänge 1, aber die Oktettlänge ist 3 Byte.
Im folgenden Beispiel fragen wir eine Datenbank ab. In diesem Fall der ArtistName
Spalte verwendet varchar(255) Datentyp:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Das Ergebnis sieht also so aus:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Wenn wir jedoch die Spalte in ucs2
ändern , wird jedes Zeichen durch einen 2-Byte-Unicode-Code dargestellt, und daher ist das Ergebnis anders.
Zur Demonstration können wir die Tabelle wie folgt ändern:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Wenn wir es jetzt noch einmal abfragen:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Ergebnis:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Nachgestellte Leerzeichen
Die OCTET_LENGTH()
Die Funktion zählt nachgestellte Leerzeichen (z. B. Leerzeichen am Ende der Zeichenfolge). Wenn wir also am Ende des ersten Beispiels ein Leerzeichen hinzufügen, erhalten wir das folgende Ergebnis:
SELECT LENGTH('Cat ');
Ergebnis:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Führende Leerzeichen
Dasselbe Ergebnis erhalten wir mit führenden Leerzeichen (z. B. Leerzeichen am Anfang des Strings):
SELECT LENGTH(' Cat');
Ergebnis:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Es sei denn natürlich, wir verwenden eine Funktion wie TRIM()
, RTRIM()
, oder LTRIM()
um die Leerzeichen zu kürzen.
Beispiel:
SELECT LENGTH(RTRIM('Cat '));
Ergebnis:
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Weitere Beispiele
Hier sind einige Beispiele für verschiedene Zeichenfolgen:
SELECT OCTET_LENGTH('Quiet Riot') AS 'Result 1', OCTET_LENGTH('') AS 'Result 2', OCTET_LENGTH('1234 7') AS 'Result 3', OCTET_LENGTH(' ') AS 'Result 4', OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Ergebnis:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Beachten Sie, dass die Ergebnisse 4 und 5 unterschiedlich sind, weil ich TRIM()
verwendet habe Funktion, um die Leerzeichen aus Ergebnis 5 zu entfernen. Da der String nur aus Leerzeichen besteht, ist die Länge des getrimmten Strings 0
.
Transact-SQL (für SQL Server, Azure) hat eine ähnliche Funktion wie MySQLs LENGTH()
und OCTET_LENGTH()
Funktionen, aber in T-SQL heißt es DATALENGTH()
.