3 Replies Latest reply: Oct 26, 2012 4:14 AM by 970371 RSS

    Accessのテキスト型データの表示がバイト数で切られてしまう

    970371
      Oracle SQL Developer 3.1からAccess2000形式のMDBに接続しています。
      あるテーブルにテキスト型のカラムがあるのですが、Oracle SQL Developer 上でテーブルデータを表示した際、
      日本語を含むデータが、テキスト型の桁数と同じバイト数で切られてしまいます。
      また、テーブルを『エクスポート』した際や『Oracleへのコピー』時も同様に切られてしまいます。。。

      そこで、Access上で桁数を倍にしてみると、最後までデータが表示されました。

      Accessのテキスト型の桁数は文字数ではなく、バイト数として解釈されてしまうのでしょうか?
      設定等でなんとかなるのでしたら、ご存知の方は教えてくれますでしょうか。

      よろしくお願いいたします。
        • 1. Re: Accessのテキスト型データの表示がバイト数で切られてしまう
          yamada
          本当ですね。
          こちらはAccess2010ですが、同様の現象が確認できました。

          設定で回避できるのかは分かりませんが、LEFT(RIGHT)関数を使用すると全データが取得できました。
          Accessのテーブル定義はデータ型:テキスト型、フィールドサイズ:10としていて、'あいうえおかきくけこ'というデータが入っています。

          そのテーブルに対し、以下のSQLを実行すると、コメントで記載した内容が取得できました。
          SELECT 
          COL1             --あいうえお
          ,LEFT(COL1, 10)  --あいうえおかきくけこ 
          ,RIGHT(COL1, 10) --あいうえおかきくけこ
          FROM TABLE1;
          問題の解決になるかは分かりませんが、ご参考までに。
          • 2. Re: Accessのテキスト型データの表示がバイト数で切られてしまう
            tmtsmic
            こんにちは。
            私は以下のようにしてみました。

            <環境>Access2003、SQL Dev 3.0.04
            <Accessのデータ>TEXT型、サイズ6、COL1=123456(全角数字)
            SELECT
             COL1,
             COL1 + '' AS COL2,
             LEN(COL1 + '') AS COL3,
             LENB(COL1 + '') AS COL4
            FROM テーブル1
            
            COL1    COL2                      COL3        COL4      
            ------  -----------------------  ----------  -----------
            123  123456              6           12        
            http://docs.oracle.com/cd/E36006_01/doc.31/b66845/datatypes_other_access.htm#i1026326
            上記リンクを見たところ
            「AccessのText型」は「OracleのVARCHAR2型」にマッピングされているようですが、
            桁はおそらく列に格納された内容は見ないで
            Access側で定義された数字しか見ていないのでしょう。
            • 3. Re: Accessのテキスト型データの表示がバイト数で切られてしまう
              970371
              yamada様、tmtsmic様、
              ご返信いただきありがとうございます。
              (閑散としているフォーラムなので、見てもらえるか心配でした。。。)

              お二方の検証結果からすると、何かかましてあげれば正常に取得できるみたいですね。
              (CSTRでも問題ありませんでした。)

              『エクスポート』の際は、クエリ等で回避ができそうです。

              『Oracleへのコピー』に関しては、テーブルに対してしかできないようなので、
              あらかじめテーブル定義を作成しておくか、
              一度『Oracleへのコピー』でデータが切れた状態で移行してから、その後テーブルをtruncateした上で、
              Access上でメモ型に変更し、『Oracleへのコピー』で空のテーブルに追加して回避することにしました。
              (テキスト型だと桁数上限があるので、単純に倍だと移行可能な桁数に制限が出てしまいます。)

              以上、取り急ぎ御礼とご報告まで。