TOPサーバ構築・運用> 日本語データの取り扱い
徹底比較!! PostgreSQL vs MySQLパート2
徹底比較!! PostgreSQL vs MySQLパート2

第3回:実は差があるキャラクターセットの違い
著者:NTTデータ   藤塚 勤也   2007/5/8
1   2  3  次のページ
日本語データの取り扱い

   今回は日本語データの取り扱いについて取り上げます。日本語データの取り扱いについては、連載「徹底比較!! PostgreSQL vs MySQL」でも少し説明しましたが、今回はさらに仕組みや性能面について取り上げていきます。
日本語キャラクターセットのサポート

   まずは、PostgreSQLとMySQLがデータベース内に収めることができる日本語データのキャラクターセットを示します(表1)。

PostgreSQL 8.1.8
  • EUC-JP
  • UTF-8
MySQL 5.0.22
  • EUC-JP
  • Shift-JIS
  • UTF-8
  • UCS-2
  • cp932

表1:格納できる日本語のキャラクターセット

   表1の通りPostgreSQLとMySQLでは、サポートする日本語データのキャラクターセットの種類に違いがあります。その中でも注意する必要があるのは、PostgreSQLでは代表的な日本語キャラクターセットの1つShift-JISをデータベース内に収めることができない点です。

   とはいうものの、Shift-JISのデータを扱えないわけではありません。あくまでもデータベース内に収めることができないだけで、アプリケーションでShift-JISを使用できないわけではありません。


サーバとクライアント間でのキャラクターセットの変換

   データベース内に収めているのとは異なるキャラクターセットをアプリケーション側で使うために、PostgreSQLとMySQLともにデータベースエンジンとアプリケーションとの間で自動的にキャラクターセットを変換する機能を持っています(図1)。

キャラクターセットの変換
図1:キャラクターセットの変換

   例えばShift-JISを使用したい場合、アプリケーションがあらかじめShift-JISを使用することを宣言しておくことにより、データベースが自動的にキャラクターセットを変換してアプリケーションにデータを渡します。この機能を使うことによって、アプリケーションはデータベース内に格納されているキャラクターセットを意識することなく、開発することができます。

   このサーバとクライアント間でのキャラクターセットの変換機能ですが、PostgreSQLとMySQLでは、具体的な実現方法に違いがあります。

   PostgreSQLは、異なったキャラクターセット間で1対1の変換を行います。具体的な例で説明すると、EUC-JPで格納されているデータに対し、クライアントからShift-JISを要求すると、サーバはEUC-JPのデータ形式を直接Shift-JISのデータ形式に変換してクライアントに渡します。

   もう一方のMySQLは、どのようなキャラクターセットもまずはUCS-2に変換し、そこからさらに対象のキャラクターセットへ変換を行います。上記の例にあてはめると、EUC-JPのデータ形式をUCS-2のデータ形式に変換し、変換されたUSC-2のデータ形式をShift-JISのデータ形式に変換します。

   もちろん、この変換方法の違いはアプリケーションの開発にはまったく影響しません。

1   2  3  次のページ


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第3回:実は差があるキャラクターセットの違い
日本語データの取り扱い
  キャラクターセットの変換性能
  日本語データのバイト数