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