[delphi-users:3462] Firebird 2.1 UTF8 のテーブルを IBX でオープンするとフィールド長が4倍になる

411 views
Skip to first unread message

きたんご

unread,
Nov 26, 2013, 8:13:30 AM11/26/13
to delphi...@freeml.com
北畑と申します。

Delphi XE2 + IBX + Firebird 2.1 でキャラクタセット UTF8 の
テーブルをオープンすると varchar のフィールド長が4倍になって
しまうようです。

DEFAULT CHARACTER SET UTF8 のデータベースを作成し、
テーブル Test を作成します。

create table Test(
xxx integer not null,
yyy varchar(20),
primary key (xxx)
);

IBDatabase, IBTransaction, IBDataSet をフォームに貼り付け、
必要なプロパティを設定後、IBDataSet をオープンすると、
yyy フィールドの Size が 80 となります。
(IBDataSet.FieldByName('yyy').Size が80となる)
キャラクタセットを UNICODE_FSS にするとこの現象は
発生しないようです。
TDBEdit に21文字以上入力できてしまって、気づきました。

この現象について、回避策等、何かご存知の方、いらっしゃいませんか?
XE5 とかだと直っているのでしょうか?

発生する環境
Windows 7 ultimate 32bit
Delphi XE2 update 4 (バージョン 16.0.4504.48759)
IBX 16.16
Firebird 2.1.5.18496


--
Hiroaki Kitahata <kita...@wingcomputer.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=kB23X
------------------------------------------------------[freeml byGMO]--

Amadare

unread,
Dec 1, 2013, 7:43:22 AM12/1/13
to delphi...@freeml.com
北畑さん、はじめまして。Amadareと申します。

私はIBXもFirebirdも初心者の域を出てないので、外していたらすみません。
更に、追試もせず、のコメントで申し訳無いですけれど...。
(今、対象環境が使えないもので)

UTF-8は、文字コードが可変長(1~4Bytes)なので、そのせいで、サイズが
Byte単位で返って来てるのではないでしょうか?

コード側で文字数制限対応するしかないのでは?


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
【地域密着型で安心】住宅の悩みはプロに相談!
都道府県別 工務店ランキング注文住宅ランキング
http://ad.freeml.com/cgi-bin/sa.cgi?id=kC8QS
------------------------------------------------------[freeml byGMO]--

きたんご

unread,
Dec 2, 2013, 7:49:06 PM12/2/13
to delphi...@freeml.com
北畑です。
Amadareさん、レスありがとうございます。

キャラクタセットを UNICODE_FSS にすると正しい結果のサイズが
得られるので、Amadareさんの仰る
> UTF-8は、文字コードが可変長(1~4Bytes)なので、そのせいで、サイズが
> Byte単位で返って来てるのではないでしょうか?
は、違うような気がします。
もし、可変長が原因なら、クエリの結果によってサイズが変わることになると
思われますが、必ず4倍になります。(結果が空になるクエリでも4倍になります)

UTF8 でなく、UNICODE_FSS でもアプリとしては問題ないため
それで逃げていますが、はっきりとした原因が分からないと気持ち悪いです。

IBXのソースを追えば何かわかるかもしれませんが、時間が無いので…。
(技術が無いといった方が正しいかも)

--
Hiroaki Kitahata <kita...@wingcomputer.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
【注目資格】理学療法士の学部がこれから役に立つ!大学選び
ランキングシェア10選 ランキングシェア byGMO
http://ad.freeml.com/cgi-bin/sa.cgi?id=kCSQr
------------------------------------------------------[freeml byGMO]--

hirodel

unread,
Jun 6, 2014, 11:21:51 PM6/6/14
to delphi...@freeml.com
加藤です いつもお世話様です
 
環境
windows7 pro
delphi7(ent)
delphixe3(ent)
firebird_1.6
Data DB
 SET SQL DIALECT 3;
 PAGE_SIZE 16384
 DEFAULT CHARACTER SET EUCJ_0208;
 
delphi7 DBExpress使用で作成した上記DBアプリを
delphiXE3でコンパイルするとSQLで呼び出したデータが
文字化けしてしまうのはなぜでしょうか?
文字化けしないようにするには何が必要でしょうか?

DEKO

unread,
Jun 7, 2014, 6:05:42 AM6/7/14
to delphi...@freeml.com
こんにちは。

> 文字化けしないようにするには何が必要でしょうか?

ServerCharSet を指定していますか?

[DBX で Firebird に接続するには?]
http://ht-deko.minim.ne.jp/tech040.html#tech074

--
by DEKO
-----------------------------
http://ht-deko.minim.ne.jp/
de...@ht-deko.minim.ne.jp
-----------------------------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
京都・箱根・軽井沢などの人気温泉リゾートに格安で宿泊できる
「体験宿泊」の情報をお届け致します。
http://ad.freeml.com/cgi-bin/sa.cgi?id=luc4y
------------------------------------------------------[freeml byGMO]--

hirodel

unread,
Jun 7, 2014, 8:27:01 PM6/7/14
to delphi...@freeml.com
DEKOさん 加藤です。
ありがとうございます、うまく行きました。
お世話様でしたm(__)m

DEKO

unread,
Oct 24, 2015, 5:19:12 PM10/24/15
to delphi...@freeml.com
Super 亀レスですが、原因は Interbase と Firebird で
UTF-8 の文字コード ID が異なるからのようです。

Interbase の UTF-8 (UTF8 / UTF_8): ID = 59
Firebird の UTF-8 (UTF8): ID = 4;

この件は (IBX.)IBSQL.pas を修正する事によって解決します。
http://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1270.2#postid-2708

--
by DEKO
-----------------------------
http://ht-deko.com/
de...@ht-deko.minim.ne.jp
-----------------------------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
「発酵リラックスルーム」でカラダの中からキレイ!
さわやかな甘さでもっとハッピーになる健康効果5選
http://ad.freeml.com/cgi-bin/sa.cgi?id=nyfQ1
------------------------------------------------------[freeml byGMO]--

きたんご

unread,
Oct 25, 2015, 2:42:33 AM10/25/15
to delphi...@freeml.com
北畑です。
ちょうど、DEKOさんの↓の記事を読んだところでした。
> http://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1270.2#postid-2708
DEKOさんバージョンの IBConsole も愛用させて頂いています。

UTF8の使用をあきらめていたのですが、もしかして、これで直るのかなぁ。
一度試してみるか。と思っていたところにタイムリーなレスを頂きました。
今後は Delphi + Firebird を UTF8 で使えそうです。

ありがとうございました。

--
Hiroaki Kitahata <kita...@wingcomputer.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
「聞き流しても英語は上達しない」
もうそんな間違った勉強をする必要はありません。
今話題の「たった一つの事」を覚えるだけの学習法とは?
↓↓
http://ad.freeml.com/cgi-bin/sa.cgi?id=nykuM
------------------------------------------------------[freeml byGMO]--

DEKO

unread,
Oct 25, 2015, 4:53:50 AM10/25/15
to delphi...@freeml.com
> UTF8の使用をあきらめていたのですが、もしかして、これで直るのかなぁ。
> 一度試してみるか。と思っていたところにタイムリーなレスを頂きました。

対策を施した IBConsole で UTF8 な DB を作って
軽く試してみましたが、特に問題は発生しないようです。

従来でも UTF8 な DB を作れるのは作れたのですが、ふとした時に
"Arithmetic exception, numeric overflow, or string truncation"
が出る事があったんですよね...で、UNICODE_FSS で逃げてた、と。

# 文字構成バイト数の計算が間違ってるのなら、
# そりゃそんなエラーも出ますよね (^^;A

--
by DEKO
-----------------------------
http://ht-deko.com/
de...@ht-deko.minim.ne.jp
-----------------------------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
キレイになりたい美女子には植物性乳酸菌!
オシャレに腸活☆毎日お腹すっきり~
http://ad.freeml.com/cgi-bin/sa.cgi?id=nylA6
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages