[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 メーリングリストの案内