- - PR -
SHIFT_JISテキストを分割してUTF-8のDBに正常に格納したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-12-24 16:47
いつもお世話になっております。
DBと長文のテキストをやりとりする際に SQLでエラーが発生し困っています。 開発環境: Struts 1.3 ibatis 2.3.0 Eclipse 3.2 JDK 1.5 oracle10g 【やりたいこと】 2660文字が制限のテキストエリアがあり、そこから 送られてくる文章を、分割して改行コードも含め正常にDBに登録したい 【入力されたテキスト】 SHIFT_JISで改行なしの全角文字1334文字 【SQLの分割処理】 UPDATE MENU SET MENU_TEXT1 = SUBSTR(#menuText#,0,1332), MENU_TEXT2 = NVL(SUBSTR(#menuText#,1333),NULL) WHERE CUSTOMER_ID = #customerId# AND MENU_ID = #menuId# ※MENU_TEXT1、MENU_TEXT2ともにVARCHAR2(4000) 上記分割処理を行うと、 「ORA-01461: LONG値はLONG列にのみバインドできます。」 というエラーで処理が落ちてしまいます。 UTF-8のDBなので、全角1文字を3バイトとみて、1334×3=4002バイト となって4000バイト上限を超えて落ちているのでしょうか? 上記SQLでの分割処理ではなく、Javaで分割をしDBに格納する方法を 試すと問題なく分割されて入るようです。 【Javaの分割処理】 ※getMenuTextDisp()は本文中の改行コードを<br />に変更したものです // テキスト本文が1332文字より長い場合 if (menuForm.getMenuTextDisp().length > 1332 ) { // 1332文字までの本文を設定する menuText = menuForm.getMenuTextDisp().substring(0, 1332); // 1333文字から2660文字までの文字を本文2に設定 secondMenuText = menuForm.getMenuTextDisp().substring(1332); } この時のSQL文は以下 UPDATE MENU SET MENU_TEXT1 = #menuText#, MENU_TEXT2 = NVL(#secondMenuText#,NULL) WHERE CUSTOMER_ID = #customerId# AND MENU_ID = #menuId# Javaの分割処理で一応は解決しましたが、上記SQLでの分割についての解決法、 また、Javaで分割した際の問題点などございましたらご教授お願いします。 長文失礼しました。 |
|
投稿日時: 2008-12-24 18:34
分割されないデータの場合はエラーは発生しないのでしょうか?
また、 ORA-01461で検索したときに一番上に表示される http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31968&forum=12&6 とかも関係ありませんか? |
1