столбец char преобразован в varchar, все еще вставляющий дополнение

Я действительно не знаю, как объяснить это. Я взял таблицу, создал ее копию с определенным столбцом как varchar вместо char. Затем я скопировал данные из одной таблицы в новую. Однако, когда я затем программно добавляю новое значение в таблицу, столбец, который ранее был char(200), все еще дополняется пробелом до 200 символов. Я пытался выполнить приведение к вставке, преобразование и даже RTrim(CAST([MynCharColumn] As nVarChar)) как найдено в другом вопросе здесь, но независимо от того, что я делаю, значение продолжает дополняться, как если бы оно было еще чар.


person Community    schedule 01.12.2009    source источник
comment
Как вы его вставляете программно? Возможно, вы сами добавляете прокладку?   -  person Bravax    schedule 01.12.2009
comment
Можете ли вы опубликовать код и схему таблицы?   -  person boydc7    schedule 01.12.2009
comment
Какую СУБД вы используете? Вы проверили наличие скрытых символов? Некоторые символы могут быть не видны при просмотре строки, но RTRIM не повлияет на них, особенно если вы используете NVARCHAR.   -  person Tom H    schedule 01.12.2009
comment
RTRIM на самом деле выполняет свою работу и обрезает записи предыдущего столбца по мере их помещения в новую таблицу. Затем любые новые записи автоматически дополняются. Я вставляю их, принимая значение текстового поля на веб-странице (ASP.NET с VB.NET). В той же функции вставки я беру другое значение текстового поля и вставляю его в другой столбец varchar в той же таблице, и оно не получает никаких дополнений. Этот код тот же, и поэтому я склоняюсь к тому, что причиной является таблица/столбец. Это либо MS SQL 2005, либо 2008. Столбец с проблемой — «Описание». То   -  person    schedule 02.12.2009
comment
Столбец с проблемой — «Описание». Тот, который работает с использованием того же кода, называется Name. Фактически любые другие столбцы nvarchar не имеют проблемы. Только когда элементы вставляются в Description, они дополняются до 200. CREATE TABLE [dbo].[tblPart]( [PartID] [int] IDENTITY(60001,1) NOT NULL, [PartType] [nvarchar](255) NULL, [ Имя] [nvarchar](255) NULL, [PurchasePrice] [float] NULL, [UnitCost] [float] NULL, [CurInventory] [int] NULL, [Manuf] [nvarchar](255) NULL, [State] [nvarchar ](255) NULL, [Статус] [nvarchar](255) NULL, [Описание] [nvarchar](200) NULL, )   -  person    schedule 02.12.2009
comment
Просто смоделировал это на моем локальном SQL Server 2008, и вставка с помощью RTRIM работает, как и ожидалось для меня - пробелы удалены.   -  person eddiegroves    schedule 06.12.2009


Ответы (1)


Дикое предположение: если вы используете какую-либо форму ORM, код ORM может по-прежнему иметь столбец как char (200) и вставлять его как char. Или, если вы используете хранимую процедуру, изменили ли вы там тип данных?

person edosoft    schedule 02.12.2009
comment
Это было именно так. Моя хранимая процедура (которую написал кто-то другой) по-прежнему передавала значение как char(200). Я обновил это, и заполнение не было вставлено в новые значения. Спасибо! - person ; 15.12.2009