[pgsql-jp: 34065] Re: データサイズの取得方法

TANIDA Yutaka tanida @ sra.co.jp
2004年 10月 6日 (水) 11:14:09 JST


谷田です。他の方もかいてますが・・・

On Wed, 06 Oct 2004 01:02:13 +0900
satoken <satoken @ ma.0038.net> wrote:

>  Debian 3.0r2 でPostgreSQL 7.2.1を使用しています。
> 
>  varchar(n)の様に宣言した列に(nは、実際には整数値) 半角+全角を含む
> 文字列を登録する際、宣言時に指定した最大バイト数である「n バイト」を越える
> 文字列を登録しないように予めPHPで制限したいと考えています。

7.2ですと、nは文字数で、実際のバイト数はエンコーディングによって異なりま
す。以下、バイト数と書かれている部分は勝手に読み替えます。

#もちろんASCIIとかだと偶然(?)バイト数になります。

>  とりあえず、「atttypmodの値 - 4」が宣言時に指定したバイト数であろう
> という推定で使用しています。
> 質問1.この「4」という値は変わらないものなのでしょうか?
>    (既に、PostgreSQLのバージョンが違うと4という数値も変わっている
>    という実績があるとか、大きな設計変更がない限り、なかなか変わらないで
>    あろう数値なのか...といった感じの質問です)

というか、その数式自体がPostgreSQLの内部構造に関わる部分なので、バージョ
ンごとに変更される可能性があります。ただ、私の知る限りでは今のところ変更
された事例はないです。

> 質問2.この「4」という値を別途select文などで取得する方法は
>     ありますでしょうか?(将来、4ではなくなったときに自動的に補正値を得る)

ありません。

>  ここで聞く事ではないのでしょうが、半角+全角を含む文字列のバイト数を
> 評価するのも一筋縄では行かなそうです。

これはPostgreSQLだけを見れば何の意味もありません。

>     //マルチバイト文字関数(mbstring)が組み込まれている
>     $str_len_byte = mb_ereg('[.]*', $string, $array);

これは正しくマルチバイトをハンドリングできる正規表現エンジンなら、バイト
数にならないんじゃないですか?

# PHPのはよく知りません。まちがっていたらすいません。

>  要は、「データベースのデータ登録時にエラーをさせたくない」

文字列長に制限のない、たとえばtext型の利用を検討されてはいかがでしょうか。

-- 
TANIDA Yutaka <tanida @ sra.co.jp>




pgsql-jp メーリングリストの案内