sql >> Databasteknik >  >> RDS >> MariaDB

Hur LENGTH() fungerar i MariaDB

I MariaDB, LENGTH() är en inbyggd strängfunktion som returnerar längden på det givna strängargumentet.

I standardläge mäts längden på strängen i byte. Men i Oracle-läge mäts det i tecken.

Syntax

Syntaxen ser ut så här:

LENGTH(str)

Där str är strängen för vilken längden kommer att returneras.

Exempel

Här är ett grundläggande exempel:

SELECT LENGTH('café');

Resultat:

+-----------------+
| LENGTH('café')  |
+-----------------+
|               5 |
+-----------------+

I det här fallet var strängen fyra tecken lång, men LENGTH() returnerade 5 .

Detta beror på att det sista tecknet använder två byte, och jag använder standard SQL-läge (min sql_mode=DEFAULT ). I standardläge för SQL, LENGTH() returnerar antalet byte.

Oracle Mode

Att byta till Oracle-läge resulterar i LENGTH() returnerar bara antalet tecken i strängen (i motsats till antalet byte).

Låt oss byta vår session till Oracle-läge:

SET SESSION sql_mode='ORACLE';

Och låt oss nu köra föregående LENGTH() exempel igen:

SELECT LENGTH('café');

Resultat:

+-----------------+
| LENGTH('café')  |
+-----------------+
|               4 |
+-----------------+

Den här gången returnerar den antalet tecken (4) istället för antalet byte (5).

I Oracle-läge, LENGTH() returnerar samma resultat som CHAR_LENGTH() och dess synonym, CHARACTER_LENGTH() .

Jämförelse med CHAR_LENGTH() och BIT_LENGTH()

Låt oss växla tillbaka till standardläget:

SET SESSION sql_mode=DEFAULT;

Här är en snabb jämförelse mellan LENGTH() i standardläge, CHAR_LENGTH() och BIT_LENGTH() som returnerar antalet bitar i en sträng:

SELECT 
    LENGTH('อ'),
    CHAR_LENGTH('อ'),
    BIT_LENGTH('อ');

Resultat:

+---------------+--------------------+-------------------+
| LENGTH('อ')   | CHAR_LENGTH('อ')   | BIT_LENGTH('อ')   |
+---------------+--------------------+-------------------+
|             3 |                  1 |                24 |
+---------------+--------------------+-------------------+

Detta thailändska tecken ( ) använder 3 byte, och därför LENGTH() returnerar 3 .

CHAR_LENGTH() returnerar 1 , eftersom det fortfarande bara är ett enda tecken och BIT_LENGTH() returnerar antalet bitar (24 ).

Återigen, om vi hade varit i Oracle-läge, LENGTH() skulle ha returnerat samma som CHAR_LENGTH() .

Icke-strängar

Om argumentet inte är en sträng, konverteras det till en sträng.

Här är ett annat exempel som använder ett nummer:

SELECT LENGTH(1234);

Resultat:

+--------------+
| LENGTH(1234) |
+--------------+
|            4 |
+--------------+

Nollargument

Skickar null returnerar null :

SELECT LENGTH(null);

Resultat:

+--------------+
| LENGTH(null) |
+--------------+
|         NULL |
+--------------+

Argument saknas

Anropar LENGTH() utan att skicka ett argument resulterar det i ett fel:

SELECT LENGTH();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'

  1. Återställ säkerhetskopiering av SQL Server-databas på lägre version

  2. Hur man skickar tabellvärdesparametrar till lagrad procedur från .net-kod

  3. Hur man konverterar en MySQL-databas till UTF-8-kodning

  4. MySQL:välja rader där en kolumn är null