diff --git a/mysys/charset.c b/mysys/charset.c
index 1b53eac77df..c5d86f9c856 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -57,22 +57,40 @@ static void set_max_sort_char(CHARSET_INFO *cs)
static void simple_cs_init_functions(CHARSET_INFO *cs)
{
- cs->strnxfrm = my_strnxfrm_simple;
- cs->strnncoll = my_strnncoll_simple;
- cs->strnncollsp = my_strnncollsp_simple;
- cs->like_range = my_like_range_simple;
- cs->wildcmp = my_wildcmp_8bit;
- cs->mb_wc = my_mb_wc_8bit;
- cs->wc_mb = my_wc_mb_8bit;
+ if (cs->state & MY_CS_BINSORT)
+ {
+ CHARSET_INFO *b= &my_charset_bin;
+ cs->strnxfrm = b->strnxfrm;
+ cs->like_range = b->like_range;
+ cs->wildcmp = b->wildcmp;
+ cs->strnncoll = b->strnncoll;
+ cs->strnncollsp = b->strnncollsp;
+ cs->tosort = b->tosort;
+ cs->strcasecmp = b->strcasecmp;
+ cs->strncasecmp = b->strncasecmp;
+ cs->hash_caseup = b->hash_caseup;
+ cs->hash_sort = b->hash_sort;
+ }
+ else
+ {
+ cs->strnxfrm = my_strnxfrm_simple;
+ cs->like_range = my_like_range_simple;
+ cs->wildcmp = my_wildcmp_8bit;
+ cs->strnncoll = my_strnncoll_simple;
+ cs->strnncollsp = my_strnncollsp_simple;
+ cs->tosort = my_tosort_8bit;
+ cs->strcasecmp = my_strcasecmp_8bit;
+ cs->strncasecmp = my_strncasecmp_8bit;
+ cs->hash_caseup = my_hash_caseup_simple;
+ cs->hash_sort = my_hash_sort_simple;
+ }
+
cs->caseup_str = my_caseup_str_8bit;
cs->casedn_str = my_casedn_str_8bit;
cs->caseup = my_caseup_8bit;
cs->casedn = my_casedn_8bit;
- cs->tosort = my_tosort_8bit;
- cs->strcasecmp = my_strcasecmp_8bit;
- cs->strncasecmp = my_strncasecmp_8bit;
- cs->hash_caseup = my_hash_caseup_simple;
- cs->hash_sort = my_hash_sort_simple;
+ cs->mb_wc = my_mb_wc_8bit;
+ cs->wc_mb = my_wc_mb_8bit;
cs->snprintf = my_snprintf_8bit;
cs->long10_to_str= my_long10_to_str_8bit;
cs->longlong10_to_str= my_longlong10_to_str_8bit;
@@ -223,7 +241,8 @@ static my_bool simple_cs_is_full(CHARSET_INFO *cs)
{
return ((cs->csname && cs->tab_to_uni && cs->ctype && cs->to_upper &&
cs->to_lower) &&
- (cs->number && cs->name && cs->sort_order));
+ (cs->number && cs->name &&
+ (cs->sort_order || (cs->state & MY_CS_BINSORT) )));
}
diff --git a/sql/share/charsets/Index.xml b/sql/share/charsets/Index.xml
index e6cea7bc615..4d54b8b53ce 100644
--- a/sql/share/charsets/Index.xml
+++ b/sql/share/charsets/Index.xml
@@ -1,6 +1,6 @@
-
+
This file lists all of the available character sets.
@@ -16,7 +16,10 @@ To make maintaining easier please:
big-five
cn-big5
csbig5
-
+
+ primary
+ compiled"
+
@@ -39,10 +42,12 @@ To make maintaining easier please:
+
Western
+
Dutch
English
@@ -71,6 +76,7 @@ To make maintaining easier please:
Pogtuguese
Spanish
+
@@ -86,7 +92,7 @@ To make maintaining easier please:
-
+
Dutch
English
@@ -112,6 +118,7 @@ To make maintaining easier please:
Western
hproman8
+
Dutch
English
@@ -129,12 +136,14 @@ To make maintaining easier please:
koi8-r
cskoi8r
+
Western
iso-646-se
+
@@ -145,6 +154,7 @@ To make maintaining easier please:
iso-ir-6
iso646-us
+
@@ -175,8 +185,8 @@ To make maintaining easier please:
Mongolian
Ukrainian
-
-
+
+
Belarusian
Bulgarian
@@ -203,19 +213,26 @@ To make maintaining easier please:
iso-8859-8
iso-ir-138
+
Thai
tis-620
-
+
+ primary
+ compiled
+
Korean
euc_kr
euc-kr
-
+
+ primary
+ compiled"
+
@@ -226,19 +243,24 @@ To make maintaining easier please:
+
Cyrillic
koi8-u
+
Simplified Chinese
chinese
iso-ir-58
-
+
+ primary
+ compiled"
+
@@ -249,6 +271,7 @@ To make maintaining easier please:
iso-8859-7
iso-ir-126
+
@@ -265,20 +288,24 @@ To make maintaining easier please:
Sorbian
+
East Asian
cp936
-
+
+ primary
+ compiled
+
Baltic
WinBaltRim
windows-1257
-
-
+
+
Latvian
Lithuanian
@@ -302,12 +329,14 @@ To make maintaining easier please:
latin5
turkish
+
South Asian
armscii-8
+
@@ -328,11 +357,13 @@ To make maintaining easier please:
ibm866
DOSCyrillicRussian
+
Central European
+
@@ -347,7 +378,7 @@ To make maintaining easier please:
Slovenian
Sorbian
-
+
Hungarian
Polish
@@ -392,7 +423,7 @@ To make maintaining easier please:
Pogtuguese
Spanish
-
+
Dutch
English
@@ -439,12 +470,14 @@ To make maintaining easier please:
Slovenian
Sorbian
+
Arabic
ms-arab
windows-1256
+
Arabic
Persian
@@ -454,7 +487,11 @@ To make maintaining easier please:
-
+
+ primary
+ compiled
+
+
diff --git a/sql/share/charsets/MacCE.xml b/sql/share/charsets/MacCE.xml
index fe64fd18abc..9a6a392b426 100644
--- a/sql/share/charsets/MacCE.xml
+++ b/sql/share/charsets/MacCE.xml
@@ -115,27 +115,7 @@
-
-
-
-
+
-
-
-
+
+
+
diff --git a/sql/share/charsets/ascii.xml b/sql/share/charsets/ascii.xml
index 67ab57de88f..c94901b1ae7 100644
--- a/sql/share/charsets/ascii.xml
+++ b/sql/share/charsets/ascii.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/cp1250.xml b/sql/share/charsets/cp1250.xml
index a863aceffc9..b858fbff2a0 100644
--- a/sql/share/charsets/cp1250.xml
+++ b/sql/share/charsets/cp1250.xml
@@ -116,6 +116,8 @@
+
+
diff --git a/sql/share/charsets/cp1251.xml b/sql/share/charsets/cp1251.xml
index 48c525eb797..79b71df9baf 100644
--- a/sql/share/charsets/cp1251.xml
+++ b/sql/share/charsets/cp1251.xml
@@ -116,26 +116,7 @@
-
-
-
+
diff --git a/sql/share/charsets/cp1256.xml b/sql/share/charsets/cp1256.xml
index 2a6f6032358..a747c7c3a93 100644
--- a/sql/share/charsets/cp1256.xml
+++ b/sql/share/charsets/cp1256.xml
@@ -116,6 +116,7 @@
+
diff --git a/sql/share/charsets/cp1257.xml b/sql/share/charsets/cp1257.xml
index 5ac2b746ff9..7f1f8293aae 100644
--- a/sql/share/charsets/cp1257.xml
+++ b/sql/share/charsets/cp1257.xml
@@ -115,26 +115,7 @@
-
-
-
+
diff --git a/sql/share/charsets/cp866.xml b/sql/share/charsets/cp866.xml
index 2b050f3c993..43bab971bb3 100644
--- a/sql/share/charsets/cp866.xml
+++ b/sql/share/charsets/cp866.xml
@@ -116,6 +116,8 @@
+
+
diff --git a/sql/share/charsets/dec8.xml b/sql/share/charsets/dec8.xml
index 4e76bbffd14..7b40041ec53 100644
--- a/sql/share/charsets/dec8.xml
+++ b/sql/share/charsets/dec8.xml
@@ -114,6 +114,7 @@
+
diff --git a/sql/share/charsets/greek.xml b/sql/share/charsets/greek.xml
index eeb22236675..1ad3d1bc9d2 100644
--- a/sql/share/charsets/greek.xml
+++ b/sql/share/charsets/greek.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/hebrew.xml b/sql/share/charsets/hebrew.xml
index 3bf8bec370e..fbd4ea0c1d2 100644
--- a/sql/share/charsets/hebrew.xml
+++ b/sql/share/charsets/hebrew.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/hp8.xml b/sql/share/charsets/hp8.xml
index 036f1cd067c..619297fa988 100644
--- a/sql/share/charsets/hp8.xml
+++ b/sql/share/charsets/hp8.xml
@@ -115,6 +115,8 @@
+
+
diff --git a/sql/share/charsets/keybcs2.xml b/sql/share/charsets/keybcs2.xml
index bdbb364822f..e509207c1c5 100644
--- a/sql/share/charsets/keybcs2.xml
+++ b/sql/share/charsets/keybcs2.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/koi8r.xml b/sql/share/charsets/koi8r.xml
index dae780f14fc..c5aeea23997 100644
--- a/sql/share/charsets/koi8r.xml
+++ b/sql/share/charsets/koi8r.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/koi8u.xml b/sql/share/charsets/koi8u.xml
index e6cba068997..fd963ff0da5 100644
--- a/sql/share/charsets/koi8u.xml
+++ b/sql/share/charsets/koi8u.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/latin1.xml b/sql/share/charsets/latin1.xml
index c14e369454e..87abbe06f77 100644
--- a/sql/share/charsets/latin1.xml
+++ b/sql/share/charsets/latin1.xml
@@ -162,26 +162,7 @@
-
-
-
+
diff --git a/sql/share/charsets/latin2.xml b/sql/share/charsets/latin2.xml
index 377ab19e8ad..9be39dee47d 100644
--- a/sql/share/charsets/latin2.xml
+++ b/sql/share/charsets/latin2.xml
@@ -161,6 +161,7 @@
+
diff --git a/sql/share/charsets/latin5.xml b/sql/share/charsets/latin5.xml
index a072ffc5072..c73cc645d42 100644
--- a/sql/share/charsets/latin5.xml
+++ b/sql/share/charsets/latin5.xml
@@ -119,6 +119,7 @@
+
diff --git a/sql/share/charsets/latin7.xml b/sql/share/charsets/latin7.xml
index eae4d501f44..89c14a3acd8 100644
--- a/sql/share/charsets/latin7.xml
+++ b/sql/share/charsets/latin7.xml
@@ -162,6 +162,7 @@
+
diff --git a/sql/share/charsets/pclatin1.xml b/sql/share/charsets/pclatin1.xml
index 742dcaec459..da4b6d2ac92 100644
--- a/sql/share/charsets/pclatin1.xml
+++ b/sql/share/charsets/pclatin1.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/sql/share/charsets/swe7.xml b/sql/share/charsets/swe7.xml
index ffa1d90608d..2768768cd9b 100644
--- a/sql/share/charsets/swe7.xml
+++ b/sql/share/charsets/swe7.xml
@@ -114,6 +114,8 @@
+
+
diff --git a/strings/ctype.c b/strings/ctype.c
index 4f6d34ddd7a..04e4e75890b 100644
--- a/strings/ctype.c
+++ b/strings/ctype.c
@@ -201,6 +201,8 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len)
case _CS_FLAG:
if (!strncmp("primary",attr,len))
i->cs.state|= MY_CS_PRIMARY;
+ else if (!strncmp("binary",attr,len))
+ i->cs.state|= MY_CS_BINSORT;
break;
case _CS_UPPERMAP:
fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len);