備忘録的プログラミングリファレンス

文字列型 CHAR、VARCHAR、TEXT

 文字列型に使用するタイプには主に CHAR() または VARCHAR()、TEXT があります。

CHAR()
CHAR() タイプは固定長で文字数が限られた場合に指定します。指定数に満たない文字数は空白に置き換わります。指定数を超えるとエラーになります。
VARCHAR()
VARCHAR() タイプは可変長で文字数が限られた場合に指定します。
TEXT
TEXT タイプは文字数が限られていないかつ上記の CHAR や VARCHAR の最大文字数を超える場合に使用します。

 データベースによって仕様が異なりますのでそれぞれのデータベースの文字列型を参照してください。

 文字列の扱いについてや文字列の関数についても解説してます。

 MySQLPostgreSQL といったデータベースによって文字列型の仕様が異なり、他のデータタイプがあります。

文字列型について

 主な文字列型には CHAR()、VARCHAR()、TEXT があります。

 以下は CHAR()、VARCHAR()、TEXT についてです。MySQL と PostgreSQL での違いが追記してあります。

CHAR()
固定長。CHAR() タイプは文字数が限られた場合に指定します。指定数に満たない文字数は空白に置き換わります。指定数を超えるとエラーになります。
MySQLでは 255 文字までです。
PostgreSQLでは 10,485,760 文字までです。
VARCHAR()
可変長。VARCHAR() タイプは文字数が限られた場合に指定します。
MySQL では可変長で最大 65,535 文字まで受け付けますが、指定数を超える分は切り捨てられます。指定数を超えても入力エラーは出ませんが超えた文字列は切り捨てられます。
PostgreSQL 10,485,760 文字までです。入力文字数に合わせて保存領域が変わります。PostgreSQL では入力文字数が指定数を超えるとエラーになります。
TEXT
TEXT タイプは文字数が限られていないかつ上記の CHAR や VARCHAR の最大文字数を超える場合に使用します。
MySQL では 4 GB分の文字列を保存が可能。
PostgreSQL では 1 GB分の文字列を保存が可能です。

 多くの場合は VARCHAR() を使用することを推奨しています。TEXT は文字数が決まっていない、かつ VARCHAR() で扱う文字数を超える場合に使用するようです。

文字列の扱い

 データベースへのデータは引用符'または"で囲むことで文字列として扱われます。

浮動小数点による差異
INSERT INTO goods (name) VALUES ('test');

SELECT * FROM goods;
..
|  6 | test           |       NULL |
..


INSERT INTO goods (name) VALUES ("test b");

SELECT * FROM goods;
..
|  7 | test b         |       NULL |
..

 文字列を表す引用符には'"があります。

エスケープ文字列

 文字列にはエスケープ文字列と呼ばれる代替え文字列を必要とするときがあります。

 例えば引用符'の中で'を使用する場合です。

引用符の中の引用符
'今日は'晴れ'です。'

 このように引用符'を文字列として扱いたい時はその直前にエスケープ文字列\を付加します。

 もしもエスケープ文字列\をエスケープしたい場合は直前にエスケープ文字列\を付加し\\とます。

エスケープ文字列
'エスケープ文字列\\をエスケープするには直前にエスケープ文字列\\を付加します。'

 MySQL ではエスケープ文字列\を文字列として取得することが quote() 関数によってできます。web ページ作成で MySQL を使用する場合に便利です。

quote() 関数 1
SELECT quote( '今日は\'晴れ\'です。' );

..
| '今日は\'晴れ\'です。'                  |
..


SELECT quote( '今日は'晴れ'です。' );

..
| 今日は'晴れ'です。         |
..

 もしも FROM 句を使用して特定のカラムに quote() 関数を使用する場合は以下のようになります。

quote() 関数 2
SELECT quote( column_a ) FROM table_name;

文字列に関するビルトイン関数

データベースごとに既存の関数、ビルトイン関数が用意されています。ビルトイン関数は単に関数とも呼ばれています。

文字列の結合

 2つの文字列を結合するには concat() 関数を使用します。

concat() 関数
SELECT concat( '文字列は「 || 」で','結合することができます。');

..
| 文字列は「 || 」で結合することができます。                                  |
..

 PostgreSQL では文字列を結合したい場所に||を使用することで文字列を繋ぐことができます。

||( PostgreSQL )
SELECT '文字列は「 || 」で' || '結合することができます。';

..
| 文字列は「 || 」で結合することができます。                                  |
..

文字列数

 文字数を数えるには length() 関数が使用できます。

||( PostgreSQL )
SELECT length( 'length() で文字数を数えることができます。' );

..
|                57 |
..