Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Funktionsweise der OCTET_LENGTH()-Funktion in MySQL

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() .