TrimTrailingBlanks в SQL Server - PullRequest
       2

TrimTrailingBlanks в SQL Server

0 голосов
/ 19 июля 2009

В sp_help документации мало говорится о свойстве TrimTrailingBlanks таблицы:

TrimTrailingBlanks | varchar(35) | Trim the trailing blanks. Returns Yes or No.

так что я думаю, будет ли хорошей практикой включать его или мне следует отключить его по умолчанию. Что я хочу сделать, это удалить пробелы из левой и правой строк, и (по имени) это то, что позволяет это свойство.

Теперь, вы знаете, если это хорошая практика, чтобы включить это свойство?

Я знаю, что могу выполнять отслеживание кода своего приложения, но было бы очень приятно, чтобы это было сделано автоматически в базе данных перед любой вставкой или обновлением. Я не знаю, будет ли у меня какой-либо недостаток, если я изменю значение Нет на Да.

Ответы [ 4 ]

2 голосов
/ 19 июля 2009

Это связано с тем, как обрабатываются конечные пробелы . Это не имеет ничего общего с ведущими пробелами. Это связано с тем, дополняются ли строки фиксированной длины пробелами до определенной длины.

Подробнее см. SET ANSI_PADDING , в котором есть хорошая таблица эффектов. Процедура sp_help сообщает о настройках этих столбцов во время их определения.

Чтобы быть в безопасности, вы всегда должны очищать свои данные перед их сохранением, независимо от того, связаны ли они с заполнением или усечением, настройкой на конкретный случай или чем-то еще. Вы никогда не знаете, что изменится обновление базы данных.

1 голос
/ 19 июля 2009

Я бы обрезал пробелы в коде.

Вы должны дважды подумать, прежде чем изменить эта настройка. TrimTrailingBlanks = Нет, является эффектом настройки ANSI_PADDING включен. ANSI_PADDING - это по умолчанию для подключения от большинства клиенты (БД-библиотека является исключение.) Кроме того, ANSI_PADDING должен быть включен, когда вы используете индексированный просмотры и проиндексированные компьютерные колонки. Могут быть другие ситуации, когда ANSI_PADDING необходим в будущем версии SQL Server.

Тем не менее, ALTER TABLE - это то, что вы можете Применение:

SET ANSI_PADDING OFF
go
CREATE TABLE trimtrailer(a varchar(12) NOT NULL)
go
INSERT trimtrailer(a) VALUES ('Trimmer ')
go
SET ANSI_PADDING ON
go
ALTER TABLE trimtrailer ALTER COLUMN a varchar(12) NOT NULL
go
INSERT trimtrailer(a) VALUES ('Trimmer ')
go
SELECT '<' + a + '>' FROM trimtrailer
go
DROP TABLE trimtrailer

С Эрланд Соммарског

0 голосов
/ 07 февраля 2018

Всегда соблюдайте такие настройки для CHAR тип поля.

Если включена настройка TrimTrailingBlanks , например, значение 'a', сохраненное в поле char (3), станет 'a', что звучит довольно нормально, не так ли? однако без TrimTrailingBlanks , сохраненное значение 'a' будет сохранено как 'a', теперь вы видите разницу.

для сравнения полей базы данных sql, это не вызывает плохого эффекта, так как '6' = '6' все еще верно, если использовать его для сопоставления совпадений строк.

однако все становится немного интереснее, когда загружают поле в программные переменные, например, строковый тип .net, теперь, если вы используете для сравнения без использования функции trim (). например "6" == "6" , вы знаете, каков будет результат.

Это очень правильный запрос, чтобы обратить внимание на TrimTrailingBlanks , однако в большинстве случаев база данных сохраняет согласованность настроек от таблицы к таблице при использовании по умолчанию.

0 голосов
/ 19 июля 2009

Параметр SET ANSI_PADDING устареет (и всегда будет включен в последующих версиях SQL Server). Я прочитал что-то на днях, что это произойдет в следующей версии (после R2?)

Мы устанавливаем это в коде из-за этого (простой RTRIM, мы делаем это в SQL, потому что у нас есть несколько клиентов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...