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

Długość MySQL() a długość_znaku()

W MySQL wiele razy funkcja length() funkcja i char_length() funkcja zapewni dokładnie te same wyniki. Jednak są też chwile, w których wyniki będą zupełnie inne. Oto dlaczego.

Po pierwsze, oto definicja każdej z tych funkcji:

char_length()
Zwraca długość ciągu mierzoną w znakach.
length()
Zwraca długość łańcucha mierzoną w bajtach.

Zauważ, że „znaki” kontra „bajty” – jeden jest mierzony w znakach , druga jest mierzona w bajtach .

W wielu przypadkach liczba bajtów będzie taka sama jak liczba znaków w ciągu, ale nie zawsze tak jest. Liczba bajtów używanych na znak zależy od sposobu przechowywania danych. Na przykład, jeśli ciąg jest przechowywany jako dane Unicode, będą 2 bajty na znak.

Oto podstawowy przykład z użyciem tekstu ASCII (gdzie obie funkcje zwracają ten sam wynik):

SELECT 
    CHAR_LENGTH('Lit'), 
    LENGTH('Lit');

Wynik:

+--------------------+---------------+
| CHAR_LENGTH('Lit') | LENGTH('Lit') |
+--------------------+---------------+
|                  3 |             3 |
+--------------------+---------------+

I często otrzymamy ten sam wynik, jeśli ciąg jest przechowywany w bazie danych:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Wynik:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  3 |
+-------------------------+--------------------+

Jeśli jednak zmienimy kolumnę bazy danych, aby przechowywać dane w formacie Unicode:

ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) unicode;

A następnie ponownie uruchom to samo zapytanie:

SELECT 
    CHAR_LENGTH(ArtistName),
    LENGTH(ArtistName)    
FROM Artists
WHERE ArtistName = 'Lit';

Otrzymujemy inny wynik:

+-------------------------+--------------------+
| CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
+-------------------------+--------------------+
|                       3 |                  6 |
+-------------------------+--------------------+

Dzieje się tak, ponieważ Unicode przechowuje każdy znak jako 2 bajty.

Jest to podobne do różnicy między datalength() i len() w T-SQL.

MySQL ma również funkcję octet_length() funkcja, która jest synonimem length() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL otrzymuje pozycję wiersza w ORDER BY

  2. Najlepszy typ pola bazy danych dla adresu URL

  3. Powszechny błąd MySQL:„Wystąpił błąd odczytu pakietu komunikacyjnego”

  4. Jak dodać ograniczenie NOT NULL w MySQL?

  5. Brak rozszerzenia mysqli, phpmyadmin nie działa