我在使用NHibernate
将非常长的字符串保存到数据库时遇到问题。字符串被截断为43,480个字符。该字符串是一个非常长的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>
答案 0 :(得分:4)
如OP的问题中的评论所述,问题出在SSMS
显示数据。
Sql Server Management Studio 2008
that you cannot paste more than 43679 characters from a column in Grid Mode.
Options (Query Results/SQL Server/Results to Grid Page) version SQL Server 2008 R2
在网格模式下为非XML数据检索的最大字符数应为65535个字符。
已经讨论了几种方法来显示XML
到SSMS
:
将检索到的最大字符设置为XML
数据,并将限制设置为无限。
尝试将结果投射到XML
,即cast(COLUMN_NAME as XML)
或者,这些讨论可能有用:
https://stackoverflow.com/a/5508193/368552,https://stackoverflow.com/a/2760023/368552
答案 1 :(得分:1)
您可以添加length属性并将其设置为max length(“2147483647”)以确保完全存储xml字符串;像
<property name="VeryLongXML" type="StringClob" length="2147483647">