こんにちは。
SCSKの丸山です。
SQLは同じでも結果が変わってしまう「仕様の壁」。今回は、CHAR型についてお伝えします。
前回の記事はこちらです。
ケース2 CHAR型の空白
Oracle DBとPostgreSQLには、それぞれCHAR型のデータ型があります。使用方法は変わりませんが、CHAR型のLENGTHの表示のされ方が異なります。今回は、以下のようなテーブルを作成した際に、Oracle DBとPostgreSQLでどのような違いがあるのか確認します。
まず、前提としてそれぞれのDBに以下のCHAR型、VARCHAR型のカラムのあるテーブルを用意します。
テーブル作成時のSQL:
CREATE TABLE TEST(CHAR_COL CHAR(10), VARCHAR_COL VARCHAR(10)); INSERT INTO TEST(CHAR_COL, VARCHAR_COL) VALUES(‘123′,’123’); |
テーブル名:TEST
CHAR_COL | VARCHAR_COL |
123 | 123 |
そのうえで、LENGTH(文字数カウント)がOracle DBとPostgreSQLでどのように違うのか見ていきましょう。
Oracle DBの場合
SQL> SELECT CHAR_COL, LENGTH(CHAR_COL), VARCHAR_COL, LENGTH(VARCHAR_COL) FROM TEST; |
CHAR_COL | LENGTH(CHAR_COL) | VARCHAR_COL | LENGTH(VARCHAR_COL) |
123 | 10 | 123 | 3 |
Oracle DBの場合、CHAR型では宣言した10文字までが空白で埋められた前提としてLENGTHの結果が表示されます。
PostgreSQLの場合
SELECT CHAR_COL, LENGTH(CHAR_COL), VARCHAR_COL, LENGTH(VARCHAR_COL) FROM TEST; |
CHAR_COL | LENGTH(CHAR_COL) | VARCHAR_COL | LENGTH(VARCHAR_COL) |
123 | 3 | 123 | 3 |
PostgreSQLでは、CHAR型、VARCHAR型共に入力した文字数の3がカウントされます。
今回のケース、挿入した文字列を表示したい場合となると、PostgreSQLの方が使いやすいかもしれませんね。Oracle DBでCHAR型のカラムに対するLENGTHを使用している場合、このような違いを理解した上で方針を考えてみてください。
今回はここまで。次回もお楽しみに!