文字同士で処理する際に、文字コードが揃っていることを確認しよう
以前、TERADATAではカラム単位に文字コードが指定できるということを書きました。
crmprogrammer38.hatenablog.com
カラムをLATINで定義できれば、UNICODEの半分のサイズとなるので、
・データのサイズも小さくできる
・そのカラムで結合する際に、結合のスピードも向上する
などいいことが多いのですが、注意点もあります。
結合する項目は、文字コードを揃えよう
テーブル1とテーブル2を結合する際に、テーブル1の結合するカラムをLATIN、テーブル2の結合する項目をUNICODEで定義しないようにしよう。
LATINのカラムとUNICODEのカラムを結合すると、LATIN側のカラムに対してUNICODE変換する処理が走るので注意。
create tableが肝なので、DBAの腕の見せ所かもしれないですね。
文字列連結する際は文字コードを揃えよう
カラム1とカラム2を連結する際に、カラム1はLATIN、カラム2はUNICODEなどにならないようにしよう。
select col1 || col2 from sample
これもLATIN側のカラムに対してUNICODE変換する処理が走る。
このようなSQLでは、col1とcol2の文字コードは同じになることをチェックしよう。
コード(LATIN)と名称(UNICODE)を連結するなどはよくやるので注意。UNICODEと文字列連結するのが見えてるなら、あえてカラムをLATINではなく、UNICODEで定義するのも手です。
固定値と結合する際も注意
select col1 || ':' || col2 from sample
このようなSQLでcol1とcol2がLATINで「:」も半角だとしてもcol1とcol2にUNICODEの変換が走ります。(V12のバージョンで経験しました)
select col1 || TRANSLATE(':' USING UNICODE_TO_LATIN) || col2 from sample
と固定値をLATINにしておくことで解消します。
数十億件のテーブルなどを扱う際には文字コードに気をつける必要があります。