diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 9244490f3ccbee43761118f2301698255c1f6d61..45db591478ce0147b15e8b65f97e02091d400a96 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -664,9 +664,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
 	when_list2 expr_list2  handler
 	opt_precision opt_ignore opt_column opt_restrict
 	grant revoke set lock unlock string_list field_options field_option
-	field_opt_list opt_binary table_lock_list table_lock varchar nchar
+	field_opt_list opt_binary table_lock_list table_lock
 	ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use
-	opt_delete_options opt_delete_option
+	opt_delete_options opt_delete_option varchar nchar nvarchar
 	opt_outer table_list table_name opt_option opt_place
 	opt_attribute opt_attribute_list attribute column_list column_list_id
 	opt_column_list grant_privileges opt_table user_list grant_option
@@ -1141,6 +1141,9 @@ type:
 					  $$=FIELD_TYPE_STRING; }
 	| varchar '(' NUM ')' opt_binary { Lex->length=$3.str;
 					  $$=FIELD_TYPE_VAR_STRING; }
+	| nvarchar '(' NUM ')'		{ Lex->length=$3.str;
+					  $$=FIELD_TYPE_VAR_STRING;
+					  Lex->charset= &my_charset_utf8; }
 	| VARBINARY '(' NUM ')' 	{ Lex->length=$3.str;
 					  Lex->charset=&my_charset_bin;
 					  $$=FIELD_TYPE_VAR_STRING; }
@@ -1227,8 +1230,14 @@ nchar:
 varchar:
 	char VARYING {}
 	| VARCHAR {}
-	| NATIONAL_SYM VARCHAR {}
-	| NCHAR_SYM VARCHAR {};
+	;
+
+nvarchar:
+	NATIONAL_SYM VARCHAR {}
+	| NCHAR_SYM VARCHAR {}
+	| NATIONAL_SYM CHAR_SYM VARYING {}
+	| NCHAR_SYM VARYING {}
+	;
 
 int_type:
 	INT_SYM		{ $$=FIELD_TYPE_LONG; }