TOPサーバ構築・運用> 実験3:文字の長さを正しく計測できるかやってみる
Vista&データベース
Windows Vistaで発生するデータベーストラブル対応指南

第4回:Oracle Database 10gやMySQLで必要な対処

著者:一志 達也   2007/7/25
前のページ  1  2  3   4  次のページ
実験3:文字の長さを正しく計測できるかやってみる

   SQL Server 2005では使い物にならなかった文字列処理を行う関数についても、同様の実験をしてみるとしよう。では下記のSQLを実行してみる。
select charcol, length(charcol), lengthB(charcol) from unicode_test;

   すると下記のような結果が得られた。


(画像をクリックすると別ウィンドウに拡大図を表示します)

   このようにサロゲートペアで扱われる文字であっても、正しい文字数をカウントしている。もちろん内部的には4バイトで格納されているので、計8バイトで2文字と正しく返されているわけだ。


実験4:文字を正しく切り出せるかやってみる

   SQL Server 2005ではCLRを使った.NETのユーザ定義関数を作るほかなかったのだが、Oracle Databaseではどうだろうか。文字列の切り出しについても同様に実験してみるとしよう。

   実行したSQLは下記のようなものである。

select substr(charcol, 1, 1) from unicode_test;

   その結果は下記の通りだ。


(画像をクリックすると別ウィンドウに拡大図を表示します)

   これまた問題はない。サロゲートペアで扱う文字であっても、正しく1文字として切り出してきているのがわかる。


まとめ:Oracle DatabaseでJIS X 0213:2004に対応するには

   SQL Server 2005が大変だっただけに、なんともあっけなかったのだが、Oracle Databaseでの対応方法も一応まとめておこう。

データベースのキャラクタセットを確認し、AL32UTF8などUnicodeを扱えるものにする

   ただこれだけだから、アプリケーション側はテストを必要とするだろうが、コードの変更などは必要ないため問題を起こす可能性も皆無であろう。

前のページ  1  2  3   4  次のページ


一志 達也
著者プロフィール
一志 達也
SI企業において、アプリケーション開発や、データベースを中心としたインフラを担当。開発者向け、初心者向けの講座を得意とする。著書に「やさしいOracle PL/SQL入門」「Oracle10g 真剣勝負」などがある。


INDEX
第4回:Oracle Database 10gやMySQLで必要な対処
  Oracle Database 10gで必要な対処
  事前実験:キャラクタセットの確認
実験3:文字の長さを正しく計測できるかやってみる
  MySQLでは?