Javascript SQL server截断大于列长度的字符串

Javascript SQL server截断大于列长度的字符串,javascript,jquery,sql-server,asp.net-mvc,Javascript,Jquery,Sql Server,Asp.net Mvc,我在SQLServer表中有列描述varchar(2000)。 在前端,我有一个属性为maxlength=2000的HTML textarea。 但是,如果在HTML文本框中输入一个字符串,在字符串SQL Server中有一个或两个Enter,则考虑字符串超过2000,截断输入字符串的4到5的最后字符。 当我通过SQL探查器检查SQL server中的字符串len()时,插入时它大于2000个字符。这是因为SQL Server将键盘输入(键代码=13)视为2个字符。 所以我的问题是, 1> 如何

我在SQLServer表中有列描述varchar(2000)。 在前端,我有一个属性为maxlength=2000的HTML textarea。 但是,如果在HTML文本框中输入一个字符串,在字符串SQL Server中有一个或两个Enter,则考虑字符串超过2000,截断输入字符串的4到5的最后字符。 当我通过SQL探查器检查SQL server中的字符串len()时,插入时它大于2000个字符。这是因为SQL Server将键盘输入(键代码=13)视为2个字符。 所以我的问题是,

1> 如何使用Jquery或javascript计算精确的字符串长度,就像使用SQLServer的length函数一样?所以,若我将精确长度的字符串传递给SQL,那个么它就不应该截断它

我也尝试在计数中计数enter序列

var num = _input1.length;
            var lineCount = (_input1.split(/\r\n|\r|\n/).length - 1);
            $("#spnCharCount").text(num + lineCount);


Code on Textarea Keyup..
$("#Description").keyup(function (event) {
        var key = event.which;
            var length = this.value.length;
        if (key >= 33 || key == 13 || key == 32) {
            var maxLength = $(this).attr("maxlength");
            if (length >= maxLength) {
                event.preventDefault();
            }
        }
           $("#spnCharDescriptionCount").text(length);
    });
SQL Server不返回任何错误,如“字符串或二进制数据将被截断” 它只是简单地将截断的字符串保存在列中

我已将存储过程中的变量声明为@Description varchar(2000)
这可能会导致问题。

如果SP的变量为2000,则永远不会出现截断错误,因为insert不会超过2000个字符。将更多的字符分配给一个字符串,然后将其保留,不会产生错误,只会截断。这就是为什么你从来没有看到过这个错误,它会缩短你给变量赋值的时间?如果textarea中的字符数超过2000个,如果不增加列的大小,则必须截断字符串。“keycode 13”不是2个字符,而是1个字符。您拥有的是回车符(字符13)和换行符(字符10)。这是两个独立的字符。如果您可以拥有超过2000个字符,那么为什么不使用
(n)varchar(MAX)
?LOL无法更改数据库以适应应用程序的需要,因为它可能会影响性能。这是可笑的懒惰和可悲的DBA。首先,它不需要是MAX,只需将大小稍微增加到2500甚至4000(如果是nvarchar的话)。但是,由于潜在的性能损失而拒绝容纳该应用程序是令人悲哀的。如果您已经将该列命名为varchar(2000),那么如果您在前端限制它,那么将其一直扩展到varchar(8000)应该不会影响性能。我同意MAX可以产生影响,但有时可能需要它。