3

我在使用NHibernate. 字符串被截断为 43,680 个字符。字符串是一个很长的XML数据包,大小不一,但有时很长。

数据库数据类型nvarchar(max)因此限制不存在。

有人可以帮助我理解为什么NHibernate要截断它,以及如何防止它?

这是我的映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  assembly="Application.DataObjects"
  namespace="Company.Application.DataObjects.Transaction.Domain">

  <class name="TransactionDO" table="Transactions">
    <id name="TransactionID">
    </id>
    <property name="Created" />
    <property name="LongXML"  type="StringClob">
      <column name="LongXML" sql-type="nvarchar(max)"/>
    </property>
    <property name="ProcessConstructor" />
    <property name="VeryLongXML" type="StringClob">
      <column name="VeryLongXML" sql-type="nvarchar(max)" />
    </property>
  </class>
</hibernate-mapping>
4

2 回答 2

4

正如 OP 问题中的评论所述,问题在于SSMS显示数据。

存在一个已知错误,Sql Server Management Studio 2008 即您不能从网格模式的列中粘贴超过 43679 个字符。

选项(查询结果/SQL Server/结果到网格页面)版本 SQL Server 2008 R2

在网格模式下检索的非 XML 数据的最大字符数应为 65535 个字符。

已经讨论了几种显示XMLthrough的方法SSMS

  • 将 Maximum Characters Retrieved 设置为XMLdata 并将限制设置为Unlimited

    尝试将结果转换为XML,即cast(COLUMN_NAME as XML)

  • 将列的输出拆分为多行
  • 将列复制粘贴到另一个程序
  • 第三方工具 (ssmsboost)

或者,这些讨论可能有用:

https://stackoverflow.com/a/5508193/368552,https://stackoverflow.com/a/2760023/368552 _ _

于 2013-03-08T20:02:37.460 回答
1

您可以添加长度属性并将其设置为最大长度(“2147483647”)以确保xml字符串的完整存储;像

<property name="VeryLongXML" type="StringClob" length="2147483647">
于 2014-11-13T12:52:55.597 回答