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