Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL length() срещу char_length()

В MySQL има много пъти, когато length() функция и char_length() функция ще осигури абсолютно същите резултати. Въпреки това, има и моменти, когато резултатите ще бъдат напълно различни. Ето защо.

Първо, ето дефиницията за всяка от тези функции:

char_length()
Връща дължината на низ, измерена в знаци.
length()
Връща дължината на низ, измерена в байтове.

Забележете „символи“ срещу „байтове“ – единият се измерва в знаци , другият се измерва в байтове .

В много случаи броят на байтовете ще бъде същият като броя на знаците в низа, но това не винаги е така. Броят на използваните байтове на знак зависи от това как се съхраняват данните. Например, ако низът се съхранява като Unicode данни, ще има 2 байта на знак.

Ето основен пример за използване на ASCII текст (където и двете функции връщат един и същ резултат):

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

Резултат:

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

И често ще получим същия резултат, ако низът се съхранява в база данни:

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

Резултат:

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

Въпреки това, ако променим колоната на базата данни, за да съхранявате данните като unicode:

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

След това изпълнете отново същата заявка:

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

Получаваме различен резултат:

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

Това е така, защото unicode съхранява всеки знак като 2 байта.

Това е подобно на разликата между datalength() и len() в T-SQL.

MySQL също има octet_length() функция, която е синоним на 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. Как да синхронизирам база данни SQLite на телефон с Android с база данни MySQL на сървъра?

  2. Библиотеката не е заредена:грешка libmysqlclient.16.dylib при опит за стартиране на 'rails server' на OS X 10.6 с mysql2 gem

  3. Неизвестна колона в клауза Къде

  4. Пребройте броя на уникалните стойности

  5. Примери за MySQL SOUNDEX().