Mysql
 sql >> Database >  >> RDS >> Mysql

Come funziona la funzione OCTET_LENGTH() in MySQL

In MySQL, il OCTET_LENGTH() La funzione restituisce la lunghezza di una stringa, misurata in byte.

Questa funzione è in realtà un sinonimo di LENGTH() .

Sintassi

La sintassi di base è questa:

OCTET_LENGTH(str)

Dove str è la stringa per la quale vuoi che venga restituita la lunghezza.

Esempio

SELECT OCTET_LENGTH('Cat');

Risultato:

+---------------------+
| OCTET_LENGTH('Cat') |
+---------------------+
|                   3 |
+---------------------+

Questo è lo stesso risultato che otterremmo se usassimo CHAR_LENGTH() funzione. Tuttavia, il OCTET_LENGTH() La funzione può restituire risultati diversi, a seconda del tipo di dati.

Tipi di dati

Quando esegui una query su un database, OCTET_LENGTH() La funzione può restituire un risultato diverso, a seconda del tipo di dati. Le stringhe Unicode restituiscono il doppio del numero di byte. Le stringhe UTF-8 possono variare.

Ecco un esempio di utilizzo di UTF-8:

SELECT 
  CHAR_LENGTH(_utf8 '€'),
  OCTET_LENGTH(_utf8 '€');

Risultati:

+--------------------------+---------------------------+
| CHAR_LENGTH(_utf8 '€')   | OCTET_LENGTH(_utf8 '€')   |
+--------------------------+---------------------------+
|                        1 |                         3 |
+--------------------------+---------------------------+

In questo caso, la lunghezza del carattere è 1, ma la lunghezza dell'ottetto è 3 byte.

Nell'esempio seguente, interroghiamo un database. In questo caso, il ArtistName la colonna utilizza varchar(255) tipo di dati:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Quindi il risultato è simile a questo:

+--------------------------+
| OCTET_LENGTH(ArtistName) |
+--------------------------+
|                        3 |
+--------------------------+

Tuttavia, se cambiamo la colonna in ucs2 , ogni carattere sarà rappresentato da un codice Unicode a 2 byte, quindi il risultato sarà diverso.

Per dimostrare, possiamo modificare la tabella in questo modo:

SELECT OCTET_LENGTH(ArtistName) 
ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;

Ora, se lo interroghiamo di nuovo:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Risultato:

+--------------------------+
| OCTET_LENGTH(ArtistName) |
+--------------------------+
|                        6 |
+--------------------------+

Spazi vuoti finali

Il OCTET_LENGTH() la funzione conta gli spazi finali (come gli spazi alla fine della stringa). Quindi se aggiungiamo uno spazio alla fine del primo esempio, otteniamo il seguente risultato:

SELECT LENGTH('Cat ');

Risultato:

+----------------+
| LENGTH('Cat ') |
+----------------+
|              4 |
+----------------+

Principali spazi vuoti

Otteniamo lo stesso risultato con spazi iniziali (es. spazi all'inizio della stringa):

SELECT LENGTH(' Cat');

Risultato:

+----------------+
| LENGTH(' Cat') |
+----------------+
|              4 |
+----------------+

A meno che, ovviamente, non utilizziamo una funzione come TRIM() , RTRIM() o LTRIM() per tagliare lo spazio bianco.

Esempio:

SELECT LENGTH(RTRIM('Cat '));

Risultato:

+-----------------------+
| LENGTH(RTRIM('Cat ')) |
+-----------------------+
|                     3 |
+-----------------------+

Altri esempi

Ecco alcuni esempi di varie stringhe:

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';

Risultato:

+----------+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 | Result 5 |
+----------+----------+----------+----------+----------+
|       10 |        0 |        7 |        3 |        0 |
+----------+----------+----------+----------+----------+

Nota che i risultati 4 e 5 sono diversi perché ho usato TRIM() funzione per tagliare gli spazi bianchi dal risultato 5. Visto che la stringa è composta solo da spazi bianchi, la lunghezza della stringa tagliata è 0 .

Transact-SQL (per SQL Server, Azure) ha una funzione simile a LENGTH() di MySQL e OCTET_LENGTH() funzioni, ma in T-SQL si chiama  DATALENGTH() .