You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server为何截断长度匹配的RoutingNumber值?

EF Core 写入SQL Server时字符串截断问题排查

你遇到的这个问题几乎可以确定是不可见隐藏字符导致的——肉眼看到的'150199880'是9个字符,但实际字符串可能包含空格、制表符、换行符这类不可见字符,导致总长度超过了varchar(9)的限制。

排查步骤:

  1. 验证字符串实际长度与字符组成
    在代码中输出目标字符串的真实长度,并打印每个字符的ASCII码,确认是否存在异常字符:

    var routingNumber = "150199880"; // 替换为你的实际变量
    Console.WriteLine($"实际长度: {routingNumber.Length}");
    foreach (char c in routingNumber)
    {
        Console.WriteLine($"'{c}' -> ASCII 码: {(int)c}");
    }
    

    正常数字的ASCII码范围是48-57,如果出现32(空格)、9(制表符)、10(换行)等数值,就是隐藏字符的来源。

  2. 确认数据库列定义准确性
    执行SQL语句再次验证列的实际定义,避免存在认知偏差:

    SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'CheckImageApiLog' AND COLUMN_NAME = 'RoutingNumber';
    

解决方法:

如果排查出存在隐藏字符,在写入数据库前对字符串做清理:

  • 简单去除首尾空白字符:
    routingNumber = routingNumber.Trim();
    
  • 严格只保留数字字符(适用于只允许数字的路由号场景):
    routingNumber = new string(routingNumber.Where(c => char.IsDigit(c)).ToArray());
    

内容的提问来源于stack exchange,提问作者Franky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:02:33