[pgsql-jp: 34752] Re: charのlength について

lee g_lee_1013 @ yahoo.co.jp
2005年 1月 28日 (金) 17:10:10 JST


こんにちは、leeです。

ご返答有難う御座います。

私のほうでは下記結果でした。

select a, length(a), octet_length(a) from test;
     a      | length | octet_length
------------+--------+--------------
 あいうえ   |      6 |           10
 abcde      |     10 |           10
(2 rows)

> # octet_lengthが14というのは何でだろう。
これも違いますね。:-(

select version();
                           version
-------------------------------------------------------------
 PostgreSQL 7.1.3 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)

>●谷田さん●

> ・PostgreSQLのバージョン
> ・データベースのエンコーディング
> ・初期化時に--no-localeオプションを付けていたかどうか

バージョンは、PostgreSQL 7.1.3。
データベースEncodingはEUC_JPで、
初期化時に
--no-locale --encoding=EUC_JP
オプションをつけていました。

それでは、よろしくお願い致します。









> こんにちは。石田@苫小牧市です。
> 
> lee wrote:
> > LEEと申します。
> > はじめて投稿します。
> > 
> > 
> > CHAR型DATATYPEフィールドにマルチバイトの
> > 文字列が入ったときのlengthの値ですが、、、
> > 
> > create table test (
> >   a char(10)
> > )
> > の定義のテーブルで
> > たとえば、aの値が → "あいうえ"
> > で、select length(a) from test;
> > すると、結果は6となります。
> > select octet_length(a) from test;
> > にするとちゃんと10が戻ってきます。
> > 
> > 
> > 
> > しかし、aの値を → "abcde" にして
> > select length(a) from test;
> > すると、結果は10となります。
> > 
> > char型は固定長なので、戻り値はスペース付きで戻ってきたら
> > lengthの値は10になりそうな気がしますが、、
> > 
> > 英文字と、マルチバイトにそれぞれlength関数をかけた時
> > なぜこんな結果が出てしまうのでしょうか?
> 
> 手元の環境で実行してみましたが、再現しませんでした。
> お使いのバージョンはいくつでしょう?
> 
> ishida=# create table test (a char(10));
> CREATE TABLE
> ishida=# insert into test values ('あいうえ');
> INSERT 1045640 1
> ishida=# insert into test values ('abcde');
> INSERT 1045641 1
> ishida=# select a, length(a), octet_length(a) from test;
>      a      | length | octet_length
> ------------+--------+--------------
>  あいうえ   |     10 |           10
>  abcde      |     10 |           10
> (2 行)
> 
> bishida=# select version();
>                                                  version
> 
> ---------------------------------------------------------------------------------------------------------
>  PostgreSQL 7.4.6 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.3
> 20040412 (Red Hat Linux 3.3.3-7)
> (1 行)
> 
> 
> 8.0.0からは
> char(n)型のlength()は後続のスペースを含まない長さを返すそうです。
> 
> ishida=# select a, length(a), octet_length(a) from test;
>        a        | length | octet_length
> ----------------+--------+--------------
>  あいうえ       |      4 |           14
>  abcde          |      5 |           10
> (2 行)
> 
> ishida=# select version();
>                                                  version
> 
> ---------------------------------------------------------------------------------------------------------
>  PostgreSQL 8.0.0 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.3
> 20040412 (Red Hat Linux 3.3.3-7)
> (1 行)
> 
> # octet_lengthが14というのは何でだろう。
> 
> -- 
> ISHIDA Akio <iakio @ mono-space.net / ishida @ cycleof5th.com>


__________________________________
Let's Celebrate Together!
Yahoo! JAPAN
http://pr.mail.yahoo.co.jp/so2005/




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