SqlServer выбранные данные столбца, заполненные нежелательным пробелом - PullRequest
0 голосов
/ 27 апреля 2018

Я обнаружил что-то, чего никогда не видел с движком базы данных В базе данных есть таблица, скажем, в таблице есть несколько столбцов nchar (50). Как имя, фамилия. Я вставляю строку в таблицу. Затем я получаю данные обратно, выбирая строку. Теперь данные дополняются пробелами, поэтому их длина составляет 50 символов.

Посмотри на это! 'MyName' становится 'MyName '

Хотя я не хочу этого манипулятивного поведения, я также думаю, что оно просто недопустимо. Проще говоря, это просто меняет мои данные без моего намерения.

Что я могу сделать, чтобы решить эту проблему? Если ответ таков: просто обрежьте строки, которые вы получаете из результатов базы данных, тогда я разочарован. Что если мои исходные данные содержали в конце пробелов, и я не хочу их терять?

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

измените тип данных с nchar (50) на nvarchar (50). nchar (50) приведет к количеству символов значения и оставшихся с пробелом. «MyName» содержит 6 символов, поэтому оставшиеся 44 символа будут пробелами.

0 голосов
/ 27 апреля 2018

Цитировать из char и varchar (Transact-SQL) :

  • Используйте символ, если размеры записей данных столбца соответствуют .
  • Используйте varchar, когда размеры записей данных столбца значительно различаются .
  • Используйте varchar (max), когда размеры записей данных столбца значительно различаются, а размер может превышать 8 000 байт.

Акцент мой.

Если у вас есть столбец char(10), строка будет «дополнена», если вы используете менее 10 символов. Например, 'a', сохраненный в char(10), станет 'a '.

При использовании переменных размеров используйте varchar (переменная означает переменную). Это означает, что значение не будет дополнено. Таким образом, с varchar(10), 'a' будет храниться как 'a'.

0 голосов
/ 27 апреля 2018

Это именно то, что ожидается:

char/nchar фиксированной длины

varchar/nvarchar имеют переменную длину

Вы также должны проверить SET ANSI_PADDING ON/OFF, чтобы установить, как сервер SQL обрабатывает конечные пробелы в столбцах varchar.

SET ANSI_PADDING ON не обрезает конечные пробелы (если они есть) в столбцах varchar

SET ANSI_PADDING OFF обрежет конечные пробелы (если они есть) в столбцах varchar

...