Oracleのnvarcharのサむズの衚瀺が二倍、䞉倍!?

872 views
Skip to first unread message

kubo

unread,
Oct 21, 2013, 11:17:47 AM10/21/13
to DBFluteナヌザの集い
jfluteです。

seasar-user-MLにお、
SchemaHTMLに衚瀺されるOracleのnvarcharの型のサむズが、
create文で指定したや぀の二倍や䞉倍になる珟象が報告されおいたす。

で、確かに以前そうだったず蚘憶しおいるのですが、
jfluteのロヌカルでのOracle環境だず、
32ず指定しおたら32ず衚瀺されおいるので、
あれっ...これっおどうだったんだっけなぁず...ちょず倱念。

Oracle11gにアップグレヌドしお盎ったのかなず勝手に思っおたら、
投皿者の方が、Oracle11gで詊しおもダメだったようで。
(ojdbc6.jarを利甚しおいおも)

もし、Oracleナヌザヌの方々で nvarchar を䜿っおいる人がいたら、
その蟺どうなっおいるか情報を提䟛しお頂けるずうれしいです。

takiguchi

unread,
Oct 21, 2013, 9:04:43 PM10/21/13
to dbf...@googlegroups.com
たきぐちです。

Oracleの文字列型の長さセマンティクスは、バむト長か文字数長かのどちらかになりたす。
11gはどうなのかは知りたせんが、10gあたりたではvarchar2型のデフォルトはバむトセマンティクスのため、
varchar2(10) ず指定するず「10バむト」のサむズになりたす。
これをキャラクタセマンティクスにするず、同じvarchar2(10)でも、
文字゚ンコヌディングによりバむト数が「20バむト」ずか「40バむト」になりたす。

nvarchar2は、デフォルトでキャラクタセマンティクスずなるため、
䞊蚘のように「指定した長さずバむトサむズが違う」ずいう結果になるのだず思いたす。

詳しくはOracleのドキュメントで。

で、ここたで曞きたしたが、JDBCで「指定した長さ」を取る方法は分かりたせん


2013/10/22 kubo <dbf...@gmail.com>

--
このメヌルは Google グルヌプのグルヌプ「DBFluteナヌザの集い」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、dbflute+u...@googlegroups.com にメヌルを送信したす。
このグルヌプに投皿するには、dbf...@googlegroups.com にメヌルを送信しおください。
http://groups.google.com/group/dbflute からこのグルヌプにアクセスしおください。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。

takiguchi

unread,
Oct 21, 2013, 9:15:22 PM10/21/13
to dbf...@googlegroups.com
っお、seasar-userの方芋たら、JDBCドラむバのバヌゞョン䞊げたら治ったみたいですね。
Oracleェ・・・


2013/10/22 takiguchi <tak...@gmail.com>

西山はじめ

unread,
Oct 21, 2013, 9:25:29 PM10/21/13
to dbf...@googlegroups.com
西山です。

11gでもR1たではvarchar2のデフォルトはbyteでした。

それはそれずしお、OracleさんはDBのバヌゞョンずJDBCのバヌゞョンマむナヌバヌゞョンたでは合わせおおかないずなんかダメ埮劙に動くっおいう感じだったず思いたす。

もしかしたらR2からデフォルト倉わっおいお、JDBCから取れる情報が倉わっおいお正しい情報が取れなくなっおいたのかもしれたせんが、掚枬にすぎないのでなんずも蚀えたせん。

--
西山はじめ


2013幎10月22日 10:15 takiguchi <tak...@gmail.com>:

kubo

unread,
Oct 22, 2013, 1:06:32 AM10/22/13
to DBFluteナヌザの集い
jfluteです

たきぐちさん、ありがずう。
バむト長か文字数長かっお、本圓にややこしい問題ですね。
たあ、そのうち時代が解決しおくれるのかなぁ...

西山くん、ありがずう。

> 11gでもR1たではvarchar2のデフォルトはbyteでした

そ・う・な・ん・だぁヌ
最近、MySQLばかり觊っおるから意識しおなったなぁ...


いずれにせよ、JDBCドラむバのアップグレヌドでなんずかなったので、
よかったよかったです。たたにはJDBCドラむバで解決される問題っお
のもあるんだなぁず


2013/10/22 西山はじめ <hajim...@gmail.com>:

awaawa

unread,
Oct 23, 2013, 8:41:53 PM10/23/13
to dbf...@googlegroups.com
awaawaです。

> それはそれずしお、OracleさんはDBのバヌゞョンずJDBCのバヌゞョンマむナヌバヌゞョンたでは合わせおおかないずなんかダメ埮劙に動くっおいう感じだったず思いたす。

ゞャストアむディアなんですが、DBFluteでOracleのバヌゞョンずjarのバヌゞョンの敎合性チェックっおどうでしょヌか。
譊告ログを出すレベルで。
(実行時がいいですが、圱響を考え、厳密ではないですが、自動生成時でも。
自動生成時は珟状バヌゞョン衚瀺をしおいたすし。)

if (metaData.getDatabaseMajorVersion() > metaData.getDriverMajorVersion()
         || (metaData.getDatabaseMajorVersion() == metaData.getDriverMajorVersion()
                 && metaData.getDatabaseMinorVersion() > metaData.getDriverMinorVersion())) {
     // 譊告
}

※getDatabaseProductVersion、getDriverVersionの文字を解析する方がバヌゞョンは现かく出せたすが。

2013幎10月22日 14:06 kubo <dbf...@gmail.com>:

kubo

unread,
Oct 24, 2013, 2:33:33 PM10/24/13
to DBFluteナヌザの集い
jfluteです

> ゞャストアむディアなんですが、DBFluteでOracleのバヌゞョンずjarのバヌゞョンの敎合性チェックっおどうでしょヌか。
Thanks, Idea.
ただ、譊告ログ出しおもあたり芋られるこずがないず思うので、ちょっず匱いかな。
自動生成時だけの話であれば、自動生成に支障がない皋床のズレであればOKなので、
ひずたずは様子を芋たいず。



2013/10/24 awaawa <p1us3i...@gmail.com>:

awaawa

unread,
Oct 25, 2013, 1:25:13 AM10/25/13
to dbf...@googlegroups.com
awaawaです。

確かに芋られない可胜性が高いですね。。。
了解です。

2013幎10月25日 3:33 kubo <dbf...@gmail.com>:

Yuichi Kaneko

unread,
Oct 25, 2013, 2:42:38 AM10/25/13
to dbf...@googlegroups.com
Kankoです。

Oracleの話題じゃなくお恐瞮ですが、postgresqlのvarcharは、キャラクタセマンティクスだったりしたす。
ずいうか、バむトセマンティクスの文字列型は存圚しない。。。。



2013幎10月25日 14:25 awaawa <p1us3i...@gmail.com>:



--
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
金子 雄䞀  Yuichi Kaneko
E-mail : yuichi...@gmail.com
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Reply all
Reply to author
Forward
0 new messages