If I want to store a date and time like this 2003-10-08 06:00:49 in the
database is then always the best choice to use type datetime
instead of using varchar.
If by "like this" you meant "in this exact format," then you need to
understand that a date is a date is a date; it has no inherent format. A
format is merely a STRING REPRESENTATION of data and can be generated at any
time. You should always store values as values and worry about presentation
later. This means dates, numbers, and certain esoteric things like GUIDs
should always be stored in a native data type and formatted in your
presentation layer.
About the only exception I can think of off hand to "always store the raw
value" is if you were storing phone numbers for presentation. Then you might
really want to store 1-800-HOT-CHKS instead of 18004682427, but even then
you might consider making two columns, one for the raw value and one for the
formatted value.
If on the other hand you simply meant "with this level of precision," then
the answer would be yes, use a datetime (instead of a shortdatetime because
that's only accurate to the minute), but you would still want to use a date
data type and not varchar.