sql >> Database >  >> RDS >> Mysql

Hoe de OCTET_LENGTH()-functie werkt in MySQL

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


  1. Hoe de PostgreSQL-foutlogboeken te decoderen

  2. Langzame volgorde van zoekopdrachten door een kolom in een samengevoegde tabel

  3. De tijdzone van de MySQL-server wijzigen

  4. 2 manieren om alle functies in MariaDB weer te geven