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