Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa funkcja OCTET_LENGTH() w MySQL

W MySQL OCTET_LENGTH() funkcja zwraca długość ciągu mierzoną w bajtach.

Ta funkcja jest właściwie synonimem LENGTH() .

Składnia

Podstawowa składnia wygląda następująco:

OCTET_LENGTH(str)

Gdzie str jest ciągiem, dla którego ma być zwrócona długość.

Przykład

SELECT OCTET_LENGTH('Cat');

Wynik:

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

Jest to ten sam wynik, który otrzymalibyśmy, gdybyśmy użyli CHAR_LENGTH() funkcjonować. Jednak OCTET_LENGTH() funkcja może zwracać różne wyniki w zależności od typu danych.

Typy danych

Kiedy wysyłasz zapytanie do bazy danych, OCTET_LENGTH() funkcja może zwrócić inny wynik, w zależności od typu danych. Ciągi Unicode zwracają podwójną liczbę bajtów. Ciągi znaków UTF-8 mogą się różnić.

Oto przykład użycia UTF-8:

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

Wyniki:

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

W tym przypadku długość znaku wynosi 1, ale długość oktetu to 3 bajty.

W poniższym przykładzie wysyłamy zapytanie do bazy danych. W tym przypadku ArtistName kolumna używa varchar(255) typ danych:

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

Wynik wygląda więc tak:

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

Jeśli jednak zmienimy kolumnę na ucs2 , każdy znak będzie reprezentowany przez 2-bajtowy kod Unicode, dlatego wynik będzie inny.

Aby to zademonstrować, możemy zmienić tabelę w następujący sposób:

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

Teraz, jeśli zapytamy o to ponownie:

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

Wynik:

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

Bluzy końcowe

OCTET_LENGTH() funkcja zlicza końcowe spacje (takie jak spacje na końcu ciągu). Jeśli więc dodamy spację na końcu pierwszego przykładu, otrzymamy następujący wynik:

SELECT LENGTH('Cat ');

Wynik:

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

Pierwsze puste miejsca

Ten sam wynik otrzymujemy z wiodącymi spacjami (np. spacjami na początku łańcucha):

SELECT LENGTH('Cat ');

Wynik:

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

O ile oczywiście nie używamy funkcji takiej jak TRIM() , RTRIM() lub LTRIM() aby przyciąć białe znaki.

Przykład:

SELECT LENGTH(RTRIM('Cat '));

Wynik:

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

Więcej przykładów

Oto kilka przykładów różnych ciągów:

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

Wynik:

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

Zauważ, że wyniki 4 i 5 są różne, ponieważ użyłem funkcji TRIM() funkcja przycinania białych znaków z wyniku 5. Biorąc pod uwagę, że ciąg składa się tylko z białych znaków, długość przyciętego ciągu wynosi 0 .

Transact-SQL (dla SQL Server, Azure) ma podobną funkcję do LENGTH() MySQL i OCTET_LENGTH() funkcji, ale w T-SQL nazywa się to  DATALENGTH() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest SQL? Co to jest baza danych? Systemy zarządzania relacyjnymi bazami danych (RDBMS) wyjaśnione w prostym języku angielskim.

  2. Jak naprawić bazy danych i tabele MySQL

  3. Jak mogę zaimportować bazę danych z MySQL z terminala?

  4. SQLSTATE [HY000] [1045] Odmowa dostępu dla użytkownika 'nazwa_użytkownika'@'localhost' przy użyciu CakePHP

  5. Jak włączyć mysqlnd dla php?