IT

UTF-8の2バイト文字の存在を失念していたことによる失敗談(+サクラエディタの見え方の違和感)について


バージョンとか設定とかにもよるのかもしれないが、サクラエディタは、中途半端にブチ切れられたUTF-8の文字コードを上位サロゲートの一部と見做して文字コード表示してしまうらしい。バイナリエディタとかで中身を見ると実際のコードは違ったりする。

例えば「あ」だが、UTF-8では「E3-81-82」の3バイト。
これを無理やり「E3」「81」「82」の1バイトずつにぶった切って保存すると、
「E3」は「U+DCE3」
「81」は「U+DC81」
「82」は「U+DC82」
で表示される。

実験として「あ」を無理やり1バイトでブチきったときのスクリーンショット↓
「E3」部分


上位サロゲートはUnicodeでU+DC00~U+DFFFの範囲なので「E3」という1バイトが勝手に上位サロゲート範囲の文字の一部として扱われてしまっている。
UTF-8の1バイト文字のコード範囲は「00」~「7F」までなので、「E3」というバイトは定義外にあたるため、
エディタの都合上無理矢理サロゲート範囲に位置づけているという考えもなくはない。
そもそも「文字」としては表現できないコード値なので、テキストエディタにこれをちゃんとコード値で表現しろというのも酷な話な気がするが
最初は「なんで突然サロゲートなんか出てきてるんだ?おい?」と思って軽くビビった。


 


【Oracle】SQL Loaderのdirect=trueオプションでKEY重複データが取り込めることに対する愚痴


SQL Loaderでdirect=trueをオプション指定すると、KEY重複してるデータが登録できてしまう。
PRIMARY KEY INDEXを張ってる場合、この結果、そのPK INDEXが破損するので、
そのPK INDEXを明示的に指定しているhint文があると、SQLエラーになる。
ひどい話である。
SQL LoaderもPKもhint文も結局はOracleの技術なはずなのに、
同社内の技術同士で首を絞めあう矛盾を作り上げてしまっている。
なんでそんな作りにしたんだOracleは…理解できない。
………というのの愚痴とメモ。



【Oracle】group byで使う条件句「having」について


havingは、group byで集計する時に一緒に使える条件句である。
個人的には、group by部分を副問い合わせにしちまって外側でwhere句で絞り込む方が多いのだが、
集計すると同時に絞り込めるという点では、SQLがシンプルになってよいのだろう。
使い方の備忘録として残す。


 


【Solaris】pargsコマンド


Solarisには「pargs」というコマンドがある。
PIDを引数に渡すとそのプロセスの実行オプションを一覧形式でずらーっと並べて表示してくれるコマンドである。
長ったらしいコマンド(特にJava)の場合、psコマンドでもなんとなく実行時オプションは調べられるが、
psコマンドの限界でオプションの最後まで確認できないことが往々にしてあり、そういうときに使う。
使い方は以下の通り(引数に調べたいプロセスのPIDを渡す)

pargs -a [PID]