#c# #.net #tsql #linq-to-sql #string-length
#c# #.net #tsql #linq-to-sql #длина строки
Вопрос:
Я использую LINQ to SQL уже много лет, но это первый раз, когда я вижу такое поведение.
У меня есть таблица БД с несколькими столбцами ( varchar(15)
), которые могут содержать пустые строки ( ''
). Я проверяю это, запустив LEN(Column)
и проверив результат be 0
.
Теперь, когда я вызываю это из LINQ2SQL, оно возвращает поле объекта со строкой, содержащей один пробел ( string.Length == 1
) .
Есть несколько обходных путей, которые я мог бы применить, например, создать их NULL
в БД или обрезать строку, но я хотел бы знать, сталкивался ли кто-нибудь с этим раньше или известна ли ошибка (сообщается в MS Connect). Если нет, я сообщу об этом.
Спасибо.
Комментарии:
1. Происходит ли это, чтобы различать нулевое значение и пустую строку? Например: как бы вы сохранили в файле нулевую строку (file len = 0) и пустую строку (также file len = 0). В мире OO нулевая строка и пустая строка — это 2 разные вещи, тогда как в мире данных они кажутся одинаковыми
Ответ №1:
Проблема связана с LEN
функцией:
SELECT LEN(' ')
Возвращает 0 в SQL Server; это полный PITA.
Но
SELECT DATALENGTH(' ')
Возвращает 1
Комментарии:
1. Большое спасибо! Один из наших специалистов по БД также узнал кое-что новое 🙂
2. Просто для добавления,
LEN
с игнорированием конечных пробелов.3. Это раздражает меня уже несколько месяцев!
4. Редактировать:
LEN
будет игнорировать завершающий пробел5. Своего рода следствием этого является то, что
SELECT LEN(LTRIM(CHAR(9)))
возвращает 1; CHAR(9) — символ табуляции; это также делает обрезку пробелов огромной проблемой!