Знаешь, UTF-8 одна только одна из encoding scheme, но у нее есть преимущество — при кодировании нет нолей и все байты определены так, что легко определить, байт ли это начальный или байт продолжения. Поэтому, если в середине запутался, то пропускаешь байтики, у который первые два бита 10.
Поэтому, если СУБД не поддерживает специальные поля для unicode (скажем, Ingres имеет специальные поля nchar и nvarchar), то UTF-8 это самое то. Для безопасности надо увеличить в четыре раза. Но тут еще одна проблема — дело в том, что unicode сейчас стандартизирует формы для представления символов с диакритическими штучками (дело в том, что были введены символы с диакритикой, а потом еще добалены сами знаки диакритики и возможности их комбинации с любым символом — как более общий механизм, вот и выходит, что можно двояко символы представлять, но... для разрешения этого конфликта и ввели форму — некоторые правила того, насколько соответствует представление духу и стандарту юникода — сейчас все глифы надо писать как базовый символ плюс набор диакритики). Поэтому есть три длины для unicode — одна в байтах, другая в unicode символах (это уже зависит от encoding scheme) и третья — длина в glyph-ах (или показываемых символах). Про глифы — посмотри на тот же стандарт, глава два, стр 44, рисунок 2-17.
Multiple Combining Characters
In some instances, more than one diacritical mark is applied to a single base character (see Figure 2-17). The Unicode Standard does not restrict the number of combining characters that may follow a base character. The following discussion summarizes the default treatment of multiple combining characters. (For the formal algorithm, see Chapter 3, Conformance.)
Figure 2-17. Stacking Sequences