Строковые или двоичные данные будут усечены Ошибка, когда данные не имеют проблем - PullRequest
0 голосов
/ 17 марта 2020

У меня ошибка на работающем демоне pop3, который должен извлекать данные электронной почты с сервера и вставлять их в несколько таблиц локальной базы данных. Но я, кажется, каждую секунду получаю эту проблему в своем журнале, что, по моему мнению, негативно влияет на производительность базы данных и использует много пулов базы данных.

После просмотра этого сообщения я проверил длину данных моего столбца, а также реализовал код, который ограничивает доступ данных к БД, если он превышает указанную длину. Но даже после этого ошибка все равно происходит. Странно, что выполнение этого запроса отдельно в базе данных вставляет данные. Но запуск в WAS вызывает проблемы. SQL Server 2015. Нет триггеров для таблицы.

TABLE CONSTRAINTS

[SQL Ошибка] errorCode: 8152, sqlState: 22001, сообщение: строка или двоичные данные будут усечены

INSERT INTO t_mail_rcvinfo
  (
    rcvInfoId,
    mailId,
    rcvType,
    rcvIdType,
    rcvId,
    sortNo,
    rcvName,
    device,
    regUserId,
    regDate,
    chgUserId,
    chgDate
   ) 
VALUES 
   (
    'CA2MLe38cc3c33863bb3b26bd8a36edeebc01',
    'CA2MLe38cc3be3863bb3b26bd8a360f3fa9c7',
    'TO',
    'EMAIL',
    'datpt@email.com',
    '3',
    'datpt@email.com',
    'PC',
    null,
    '2020-03-17 12:02:07.056',
    null,
    '2020-03-17 12:02:07.056'
   )  

// Реализован код после рассмотрения проблемы

for (int i = 0; i < list1.size(); i++) {
MailRcvInfoVO infoVO = (MailRcvInfoVO)list1.get(i);         
  if (infoVO.getRcvId().getBytes("UTF-8").length > 200) {
    rcvToIdLength = infoVO.getRcvId().getBytes("UTF-8").length;
    isValidMail = false;
    break;
  }

  if (infoVO.getRcvName().getBytes("UTF-8").length > 200) {
    rcvToNameLength = infoVO.getRcvName().getBytes("UTF-8").length;
    isValidMail = false;
    break;
  }
}
...