home :: technology :: coding :: sql_rtrim

SQL Server: Padding of data in columns of type ‘varchar’

I’ve been having some trouble with the way Microsoft SQL Server pads strings stored in its tables with spaces. Generally, I would assume that columns of type ‘CHAR’ would be a fixed length (and therefore padded), while columns of type ‘VARCHAR’ would be variable length. But I would be wrong.

The default behavior for SQL Server 7.0 and Server 2000 is that CHAR’s and VARCHAR’s are padded to their maximum lengths. To make the VARCHAR columns unpadded, the ‘ansi_padding’ property needs to be set to ‘off’. Unfortunately, you must do this every time you open a session with the database server. There isn’t a way to force ANSI padding off as the default.

Also note that the ANSI padding property must be turned off when the table is created. There isn’t a way to change this property for pre-existing tables without recreating them and copying the data.

Here’s a SQL example:

  set ansi_padding off;
  CREATE TABLE dbo.pwrdesk (
    ou                   varchar(55) NOT NULL,
    parent_broker        char(5) NOT NULL,
    rollout              int NOT NULL,
    startpage            int NOT NULL,
    mediaview            int NOT NULL

In this example, the ‘parent_broker’ column is padded to 5 characters, but the ‘ou’ column is not (because it is of type ‘varchar’).

There are a couple of ways to check if a column uses ANSI padding:

  select columnproperty(object_id('<tablename>'),'<columnname>','UsesAnsiTrim')

This returns a ‘1’ if the column is right-padded, or a ‘0’ if it is trimmed.

  sp_help <tablename>

This returns all the properties of the database table, including TrimTrailingBlanks, which is ‘yes’ if ANSI padding is off, and ‘no’ otherwise.

Finally, here’s an example of a SQL statement that right trims all the existing data in a table:

  update pwrdesk set ou = rtrim(ou);

Last Updated: Mon, 26 Sep 2005


KP wrote at 2006-08-21 15:13:

Undocumented method: exec sp_configure 'allow',1 reconfigure with override

-- Turn on the "TrimTrailingBlanks" bit for tables listed.... -- Will SET TrimTrailingBlanks to YES for all columns in the table -- you might want to be more selective by listing table and column name.

Update syscolumns set typestat = typestat |1 where id in ( object_id('achsettings') )

-- TURN OFF allow updates sp_configure 'allow',0 reconfigure


Email or URL: