1

私は下にいます:
Windows XP
MSSQL 2005
Rails 3.0.9
activerecord-sqlserver-adapter
tinytds

xml 型のフィールドのコンテンツを取得しようとすると、xml 文字列が切り取られるという問題が発生します。

助けてくれてありがとう

これは DB に保存されている xml です (ロシア文字で申し訳ありません)。

<application>
  <patent-type>Заявка на винахід</patent-type>
  <title>WAY</title>
  <native-number>inner123</native-number>
  <inid51 type="array" />
  <inid54>
    <x54-title-ukr>WAY</x54-title-ukr>
    <x54-title-rus />
    <x54-title-eng />
  </inid54>
  <applicants type="array">
    <applicant order="1">
      <app-person>physical</app-person>
      <app-name-ukr>Drobyazko Ob Ob</app-name-ukr>
      <app-addr-ukr>Ukrainka</app-addr-ukr>
      <app-country>UA</app-country>
      <app-kzo />
      <app-name-rus />
      <app-addr-rus />
      <app-name-eng />
      <app-addr-eng />
    </applicant>
    <applicant order="2">
      <app-person>physical</app-person>
      <app-name-ukr>Stetsenko Ser Vol</app-name-ukr>
      <app-addr-ukr>Kyiv</app-addr-ukr>
      <app-country>UA</app-country>
      <app-kzo />
      <app-name-rus />
      <app-addr-rus />
      <app-name-eng />
      <app-addr-eng />
    </applicant>
  </applicants>
  <inventors type="array">
    <inventor order="1">
      <inv-name-ukr>Drobyazko Ob Ob</inv-name-ukr>
      <inv-addr-ukr>Ukrainka</inv-addr-ukr>
      <inv-country>UA</inv-country>
      <inv-publ>Ні</inv-publ>
      <inv-name-rus />
      <inv-addr-rus />
      <inv-name-eng />
      <inv-addr-eng />
    </inventor>
    <inventor order="2">
      <inv-name-ukr>Stetsenko Ser Vol</inv-name-ukr>
      <inv-addr-ukr>Kyiv</inv-addr-ukr>
      <inv-country>UA</inv-country>
      <inv-publ>Ні</inv-publ>
      <inv-name-rus />
      <inv-addr-rus />
      <inv-name-eng />
      <inv-addr-eng />
    </inventor>
  </inventors>
  <priorities>
    <priority-cfg>
      <type>prr-none</type>
      <prr-date />
      <prr-numb />
      <is-priority-3x />
      <is-priority-62 />
      <is-priority-66 />
    </priority-cfg>
    <priority-3x type="array" />
    <priority-62 type="array" />
    <priority-66 type="array" />
  </priorities>
  <inid86>
    <x86-numb />
    <x86-date />
  </inid86>
  <inid87>
    <x87-numb />
    <x87-date />
  </inid87>
  <representative>
    <repr-name>Drobyazko Ooo KKK</repr-name>
    <repr-regnum>200</repr-regnum>
    <repr-person>legal</repr-person>
  </representative>
  <address>
    <addr-country>UA</addr-country>
    <addr-zipcode />
    <addr-region />
    <addr-town-type>м.</addr-town-type>
    <addr-town-val>Kyiv</addr-town-val>
    <addr-rayon />
    <addr-street-type>вул.</addr-street-type>
    <addr-street-val />
    <addr-building-type>буд.</addr-building-type>
    <addr-building-val />
    <addr-room-type>кв.</addr-room-type>
    <addr-room-val />
    <addr-addressee-person>physical</addr-addressee-person>
    <addr-addressee>Drobyazko Dkkd Lll</addr-addressee>
    <addr-tel>2323232</addr-tel>
    <addr-fax />
    <addr-email />
    <full-address>м. Kyiv, UA; Drobyazko Dkkd Lll</full-address>
  </address>
  <flags>
    <force-publication />
    <patent-foreign />
  </flags>
</application>

Eclaim.find(1).app_xmlを使用して、上記のフィールドの内容を取得しています。また、ファイルFile.open("c:/w.txt", 'wb') { |f|
に xml フィールドを書き込んでいます。f.write Eclaim.find(100003).app_xml }

ファイルの内容 (サイズ2070バイト) は次 のとおりです。

<application><patent-type>Заявка на винахід&lt;/patent-type><title>WAY</title><native-number>inner123</native-number><inid51 type="array"/><inid54><x54-title-ukr>WAY2</x54-title-ukr><x54-title-rus/><x54-title-eng/></inid54><applicants type="array"><applicant order="1"><app-person>physical</app-person><app-name-ukr>Drobyazko Ob Ob</app-name-ukr><app-addr-ukr>Ukrainka</app-addr-ukr><app-country>UA</app-country><app-kzo/><app-name-rus/><app-addr-rus/><app-name-eng/><app-addr-eng/></applicant><applicant order="2"><app-person>physical</app-person><app-name-ukr>Stetsenko Ser Vol</app-name-ukr><app-addr-ukr>Kyiv</app-addr-ukr><app-country>UA</app-country><app-kzo/><app-name-rus/><app-addr-rus/><app-name-eng/><app-addr-eng/></applicant></applicants><inventors type="array"><inventor order="1"><inv-name-ukr>Drobyazko Ob Ob</inv-name-ukr><inv-addr-ukr>Ukrainka</inv-addr-ukr><inv-country>UA</inv-country><inv-publ>Ні&lt;/inv-publ><inv-name-rus/><inv-addr-rus/><inv-name-eng/><inv-addr-eng/></inventor><inventor order="2"><inv-name-ukr>Stetsenko Ser Vol</inv-name-ukr><inv-addr-ukr>Kyiv</inv-addr-ukr><inv-country>UA</inv-country><inv-publ>Ні&lt;/inv-publ><inv-name-rus/><inv-addr-rus/><inv-name-eng/><inv-addr-eng/></inventor></inventors><priorities><priority-cfg><type>prr-none</type><prr-date/><prr-numb/><is-priority-3x/><is-priority-62/><is-priority-66/></priority-cfg><priority-3x type="array"/><priority-62 type="array"/><priority-66 type="array"/></priorities><inid86><x86-numb/><x86-date/></inid86><inid87><x87-numb/><x87-date/></inid87><representative><repr-name>Drobyazko Ooo KKK</repr-name><repr-regnum>200</repr-regnum><repr-person>legal</repr-person></representative><address><addr-country>UA</addr-country><addr-zipcode/><addr-region/><addr-town-type>м.</addr-town-type><addr-town-val>Kyiv</addr-town-val><addr-rayon/><addr-street-type>вул.</addr-street-type><addr-street-val/><addr-building-type>буд.</addr-building-type><addr-building-val/><addr-room-type>кв.</addr-room-type><addr-room-val/><addr-addressee-person>physical</addr-addressee-

Rails が xml フィールドの内容を2070バイトに切り詰めているようです。

誰か助けてくれませんか?

4

1 に答える 1

2

この質問をよく見かけますが、実にシンプルな答えがあります。SQL Server には、TEXTSIZE (1) という設定があり、DBLIB/TinyTDS 接続用に比較的小さなサイズに設定されています。ここで最近、デフォルトの ODBC 接続を模倣するサイズにアダプターを設定しました (2)。また、README (3) には、古いバージョンのアダプター用のセクションがあり、接続を構成できるため、特に TEXTSIZE も設定できます。

于 2012-05-11T11:11:12.567 に答える