>で、DBに入れるときには、UTFの方が良いのかな
良い、悪い。じゃないの。C/C++ の基礎知識があるとして...

UCS-2 表現だと、それを1バイトごとに並び替えてバイトストリームとして処理すると、
* バイトオーダーの問題(リトル/ビッグエンディング)
* ストリーム中に 0x00 が現れることに対する対応。
この二つが出てくる。後者は、ストリーム処理をバイトからワードに書き換えるか、または
(MBCS 処理のように)1 バイト先読みする必要が起きる。
で、unix 畑の連中が、バイトオーダーの問題を持たず、データ中に 0x00 が現れない UNICODE 表現を
作ったのが UTF8.

少し偏見交じりにいえば、UTF8 しかサポートしていないアプリ/DB は、内部処理 UNICODE 化されていない
コードを元にしているのだろう。と。
UCS2 サポートするためには、各種文字/文字列処理関数が w_char サポートした処理系で
かかれているのであろう。と思われる。ってところ。