diff --git a/include/config-win.h b/include/config-win.h
index ba1a987f14cd6f840e425d626c624d3f008dcc05..e86e0f085969d1d0aa17b09f30da86b6c6f175a8 100644
--- a/include/config-win.h
+++ b/include/config-win.h
@@ -408,4 +408,5 @@ inline double ulonglong2double(ulonglong value)
 #define HAVE_CHARSET_ucs2 1
 #define HAVE_CHARSET_ujis 1
 #define HAVE_CHARSET_utf8 1
+#define HAVE_UCA_COLLATIONS 1
 
diff --git a/include/mysys_err.h b/include/mysys_err.h
index 1fd7c2eddc6b249feed1313a35ef6610994ea2ca..1e489395c76378f5fb5e0053a7225638f74a066a 100644
--- a/include/mysys_err.h
+++ b/include/mysys_err.h
@@ -56,7 +56,8 @@ extern const char * NEAR globerrs[];	/* my_error_messages is here */
 #define EE_CANT_SYMLINK		25
 #define EE_REALPATH		26
 #define EE_SYNC			27
-#define EE_ERROR_LAST           27 /*Copy last error nr.*/
+#define EE_UNKNOWN_COLLATION	28
+#define EE_ERROR_LAST           28 /*Copy last error nr.*/
 /* Add error numbers before EE_ERROR_LAST and change it accordingly. */
 
   /* exit codes for all MySQL programs */
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index eeb1ccf528ee9f0bc64974467a6c3c70128de6e4..09e2914bbaaa1576e22ba920232a540e26070ffd 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -41,8 +41,8 @@ SET_STACK_SIZE(9000)			/* Minimum stack size for program */
 static uint decode_bits;
 static char **default_argv;
 static const char *load_default_groups[]= { "myisamchk", 0 };
-static const char *set_charset_name, *opt_tmpdir;
-static CHARSET_INFO *set_charset;
+static const char *set_collation_name, *opt_tmpdir;
+static CHARSET_INFO *set_collation;
 static long opt_myisam_block_size;
 static long opt_key_cache_block_size;
 static const char *my_progname_short;
@@ -149,7 +149,7 @@ int main(int argc, char **argv)
 } /* main */
 
 enum options_mc {
-  OPT_CHARSETS_DIR=256, OPT_SET_CHARSET,OPT_START_CHECK_POS,
+  OPT_CHARSETS_DIR=256, OPT_SET_COLLATION,OPT_START_CHECK_POS,
   OPT_CORRECT_CHECKSUM, OPT_KEY_BUFFER_SIZE,
   OPT_KEY_CACHE_BLOCK_SIZE, OPT_MYISAM_BLOCK_SIZE,
   OPT_READ_BUFFER_SIZE, OPT_WRITE_BUFFER_SIZE, OPT_SORT_BUFFER_SIZE,
@@ -252,9 +252,9 @@ static struct my_option my_long_options[] =
    (gptr*) &check_param.auto_increment_value,
    (gptr*) &check_param.auto_increment_value,
    0, GET_ULL, OPT_ARG, 0, 0, 0, 0, 0, 0},
-  {"set-character-set", OPT_SET_CHARSET,
-   "Change the character set used by the index",
-   (gptr*) &set_charset_name, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+  {"set-collation", OPT_SET_COLLATION,
+   "Change the collation used by the index",
+   (gptr*) &set_collation_name, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
   {"set-variable", 'O',
    "Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value.",
    0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -739,8 +739,9 @@ static void get_options(register int *argc,register char ***argv)
   check_param.tmpdir=&myisamchk_tmpdir;
   check_param.key_cache_block_size= opt_key_cache_block_size;
 
-  if (set_charset_name)
-    if (!(set_charset=get_charset_by_name(set_charset_name, MYF(MY_WME))))
+  if (set_collation_name)
+    if (!(set_collation= get_charset_by_name(set_collation_name,
+                                             MYF(MY_WME))))
       exit(1);
 
   myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size);
@@ -874,11 +875,12 @@ static int myisamchk(MI_CHECK *param, my_string filename)
 	(((ulonglong) 1L << share->base.keys)-1)) ||
        test_if_almost_full(info) ||
        info->s->state.header.file_version[3] != myisam_file_magic[3] ||
-       (set_charset && set_charset->number != share->state.header.language) ||
+       (set_collation &&
+        set_collation->number != share->state.header.language) ||
        myisam_block_size != MI_KEY_BLOCK_LENGTH))
   {
-    if (set_charset)
-      param->language=set_charset->number;
+    if (set_collation)
+      param->language= set_collation->number;
     if (recreate_table(param, &info,filename))
     {
       VOID(fprintf(stderr,
diff --git a/mysys/charset.c b/mysys/charset.c
index 5840c885e401411995b951b98dd06ab6c20ac283..4b7ad3e59f477317bbcba847c62beb6faad2db03 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -530,7 +530,7 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags)
   {
     char index_file[FN_REFLEN];
     strmov(get_charsets_dir(index_file),MY_CHARSET_INDEX);
-    my_error(EE_UNKNOWN_CHARSET, MYF(ME_BELL), cs_name, index_file);
+    my_error(EE_UNKNOWN_COLLATION, MYF(ME_BELL), cs_name, index_file);
   }
 
   return cs;
diff --git a/mysys/errors.c b/mysys/errors.c
index 5f548cad480730f07f3f5186cc54a9e2023313ef..d321e7f6125aca7f08cd82edecd5196b62d33c72 100644
--- a/mysys/errors.c
+++ b/mysys/errors.c
@@ -49,6 +49,7 @@ const char * NEAR globerrs[GLOBERRS]=
   "Can't create symlink '%s' pointing at '%s' (Error %d)",
   "Error on realpath() on '%s' (Error %d)",
   "Can't sync file '%s' to disk (Errcode: %d)",
+  "Collation '%s' is not a compiled collation and is not specified in the '%s' file",
 };
 
 void init_glob_errs(void)
@@ -87,5 +88,6 @@ void init_glob_errs()
   EE(EE_CANT_SYMLINK)=	"Can't create symlink '%s' pointing at '%s' (Error %d)";
   EE(EE_REALPATH)=	"Error on realpath() on '%s' (Error %d)";
   EE(EE_SYNC)=		"Can't sync file '%s' to disk (Errcode: %d)";
+  EE(EE_UNKNOWN_COLLATION)= "Collation '%s' is not a compiled collation and is not specified in the %s file";
 }
 #endif