diff -r 483686478c6a lib/sqlalchemy/dialects/oracle/base.py
--- a/lib/sqlalchemy/dialects/oracle/base.py	Sat May 15 16:12:14 2010 -0400
+++ b/lib/sqlalchemy/dialects/oracle/base.py	Tue May 18 18:08:15 2010 -0400
@@ -247,7 +247,10 @@
         return self.visit_FLOAT(type_)
         
     def visit_unicode(self, type_):
-        return self.visit_NVARCHAR(type_)
+        if self.dialect._supports_nchar:
+            return self.visit_NVARCHAR(type_)
+        else:
+            return self.visit_VARCHAR(type_)
     
     def visit_INTERVAL(self, type_):
         return "INTERVAL DAY%s TO SECOND%s" % (
@@ -286,7 +289,7 @@
             return "%(name)s(%(precision)s, %(scale)s)" % {'name':name,'precision': precision, 'scale' : scale}
         
     def visit_VARCHAR(self, type_):
-        if self.dialect.supports_char_length:
+        if self.dialect._supports_char_length:
             return "VARCHAR(%(length)s CHAR)" % {'length' : type_.length}
         else:
             return "VARCHAR(%(length)s)" % {'length' : type_.length}
@@ -589,8 +592,6 @@
     
     reflection_options = ('oracle_resolve_synonyms', )
 
-    supports_char_length = True    
-    
     def __init__(self, 
                 use_ansi=True, 
                 optimize_limits=False, 
@@ -604,12 +605,19 @@
         self.implicit_returning = self.server_version_info > (10, ) and \
                                         self.__dict__.get('implicit_returning', True)
 
-        self.supports_char_length = self.server_version_info >= (9, )
-
         if self.server_version_info < (9,):
             self.colspecs = self.colspecs.copy()
             self.colspecs.pop(sqltypes.Interval)
+            self.use_ansi = False
 
+    @util.memoized_property
+    def _supports_char_length(self):
+        return self.server_version_info >= (9, )
+
+    @util.memoized_property
+    def _supports_nchar(self):
+        return self.server_version_info >= (9, )
+        
     def do_release_savepoint(self, connection, name):
         # Oracle does not support RELEASE SAVEPOINT
         pass
@@ -771,7 +779,7 @@
                                           resolve_synonyms, dblink,
                                           info_cache=info_cache)
         columns = []
-        if self.supports_char_length:
+        if self._supports_char_length:
             char_length_col = 'char_length'
         else:
             char_length_col = 'data_length'
