In relation to the ANSI_PADDING portion of your question, you can use sys.columns
From ANSI_PADDING MSDN article:
Controls the way the column stores values shorter than the defined
size of the column, and the way the column stores values that have
trailing blanks in char, varchar, binary, and varbinary data.
...
This setting affects only the definition of new columns. After the
column is created, SQL Server stores the values based on the setting
when the column was created. Existing columns are not affected by a
later change to this setting.
Here is a query to check the ANSI Padding value for object columns of the affected data types:
SELECT TableName = QUOTENAME(SCHEMA_NAME(t.schema_id))
+ '.'
+ QUOTENAME(t.name)
, ColName = c.name
, ColTypeName = ty.name
, c.is_ansi_padded
, ObjectType = t.[type]
, ObjectTypeDesc = t.type_desc
FROM sys.columns c
INNER JOIN sys.objects t on t.object_id = c.object_id
INNER JOIN sys.types ty
ON ty.system_type_id = c.system_type_id
AND ty.user_type_id = c.user_type_id
WHERE ty.name in ('char','varchar','binary','varbinary')
--AND c.is_ansi_padded = 0 --you can filter on 0 to show the columns that are not following best practices.
ORDER BY 1,2
;