In MySQL, de OCTET_LENGTH() functie retourneert de lengte van een string, gemeten in bytes.
Deze functie is eigenlijk een synoniem van LENGTH() .
Syntaxis
De basissyntaxis gaat als volgt:
OCTET_LENGTH(str)
Waar str is de tekenreeks waarvan u de lengte wilt retourneren.
Voorbeeld
SELECT OCTET_LENGTH('Cat');
Resultaat:
+---------------------+
| OCTET_LENGTH('Cat') |
+---------------------+
| 3 |
+---------------------+
Dit is hetzelfde resultaat dat we zouden krijgen als we de CHAR_LENGTH() . zouden gebruiken functie. Echter, de OCTET_LENGTH() functie kan verschillende resultaten opleveren, afhankelijk van het gegevenstype.
Gegevenstypen
Wanneer u een database opvraagt, wordt de OCTET_LENGTH() functie kan een ander resultaat retourneren, afhankelijk van het gegevenstype. Unicode-tekenreeksen retourneren het dubbele aantal bytes. UTF-8-tekenreeksen kunnen variëren.
Hier is een voorbeeld van het gebruik van UTF-8:
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Resultaten:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
In dit geval is de tekenlengte 1, maar de octetlengte is 3 bytes.
In het volgende voorbeeld vragen we een database op. In dit geval is de ArtistName kolom gebruikt varchar(255) gegevenstype:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Het resultaat ziet er dus als volgt uit:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Als we de kolom echter wijzigen in ucs2 , wordt elk teken weergegeven door een Unicode-code van 2 bytes, en daarom zal het resultaat anders zijn.
Om te demonstreren, kunnen we de tabel als volgt wijzigen:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Als we het nu opnieuw opvragen:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultaat:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Blanco's achterop
De OCTET_LENGTH() functie telt volgspaties (zoals spaties aan het einde van de tekenreeks). Dus als we een spatie toevoegen aan het einde van het eerste voorbeeld, krijgen we het volgende resultaat:
SELECT LENGTH('Cat ');
Resultaat:
+----------------+
| LENGTH('Cat ') |
+----------------+
| 4 |
+----------------+
Leading blanks
We krijgen hetzelfde resultaat met voorloopspaties (bijv. spaties aan het begin van de tekenreeks):
SELECT LENGTH(' Cat');
Resultaat:
+----------------+
| LENGTH(' Cat') |
+----------------+
| 4 |
+----------------+
Tenzij we natuurlijk een functie gebruiken zoals TRIM() , RTRIM() , of LTRIM() om de witruimte in te korten.
Voorbeeld:
SELECT LENGTH(RTRIM('Cat '));
Resultaat:
+-----------------------+
| LENGTH(RTRIM('Cat ')) |
+-----------------------+
| 3 |
+-----------------------+
Meer voorbeelden
Hier zijn enkele voorbeelden van verschillende strings:
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';
Resultaat:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Merk op dat resultaten 4 en 5 verschillend zijn omdat ik de TRIM() . heb gebruikt functie om de witruimte van resultaat 5 te verwijderen. Aangezien de tekenreeks alleen uit witruimte bestaat, is de lengte van de bijgesneden tekenreeks 0 .
Transact-SQL (voor SQL Server, Azure) heeft een vergelijkbare functie als MySQL's LENGTH() en OCTET_LENGTH() functies, maar in T-SQL heet het DATALENGTH() .