MDEV-7947 strcmp() takes 0.37% in OLTP RO

This patch ensures that all identical character sets shares the same
cs->csname.
This allows us to replace strcmp() in my_charset_same() with comparisons
of pointers. This fixes a long standing performance issue that could cause
as strcmp() for every item sent trough the protocol class to the end user.

One consequence of this patch is that we don't allow one to add a character
definition in the Index.xml file that changes the csname of an existing
character set. This is by design as changing character set names of existing
ones is extremely dangerous, especially as some storage engines just records
character set numbers.

As we now have a hash over character set's csname, we can in the future
use that for faster access to a specific character set. This could be done
by changing the hash to non unique and use the hash to find the next
character set with same csname.
This commit is contained in:
Monty 2020-07-20 19:26:31 +03:00
parent 46ffd47f42
commit dbcd3384e0
30 changed files with 386 additions and 245 deletions

View File

@ -1049,9 +1049,13 @@ extern my_bool resolve_collation(const char *cl_name,
CHARSET_INFO **cl);
extern void free_charsets(void);
extern char *get_charsets_dir(char *buf);
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
static inline my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2)
{
return (cs1->csname == cs2->csname);
}
extern my_bool init_compiled_charsets(myf flags);
extern void add_compiled_collation(struct charset_info_st *cs);
extern void add_compiled_extra_collation(struct charset_info_st *cs);
extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info,
char *to, size_t to_length,
const char *from, size_t length);

View File

@ -72,7 +72,8 @@ extern const char *globerrs[]; /* my_error_messages is here */
#define EE_BADMEMORYRELEASE 36
#define EE_PERM_LOCK_MEMORY 37
#define EE_MEMCNTL 38
#define EE_ERROR_LAST 38 /* Copy last error nr */
#define EE_DUPLICATE_CHARSET 39
#define EE_ERROR_LAST 39 /* Copy last error nr */
/* Add error numbers before EE_ERROR_LAST and change it accordingly. */

View File

@ -447,7 +447,7 @@ Bug#46448 trailing spaces are not ignored when user collation maps space != 0x20
set names latin1;
show collation like 'latin1_test';
Collation Charset Id Default Compiled Sortlen
latin1_test latin1 99 Yes 1
latin1_test latin1 331 1
select "foo" = "foo " collate latin1_test;
"foo" = "foo " collate latin1_test
1
@ -466,6 +466,7 @@ utf8mb4_test_ci utf8mb4 326 8
utf16_test_ci utf16 327 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
latin1_swedish_nopad2_ci latin1 334 1
@ -490,7 +491,7 @@ utf32_test_ci utf32 391 8
utf8_maxuserid_ci utf8 2047 8
show collation like '%test%';
Collation Charset Id Default Compiled Sortlen
latin1_test latin1 99 Yes 1
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
utf8_test_ci utf8 353 8
@ -3034,3 +3035,10 @@ SELECT 'chž'< 'i';
1
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2'
#
# MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
#
SHOW COLLATION LIKE 'latin1_test_replace';
Collation Charset Id Default Compiled Sortlen
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
ERROR HY000: Unknown collation: 'latin1_test_replace'

View File

@ -3,6 +3,10 @@
--source include/have_utf16.inc
--source include/have_utf32.inc
--disable_query_log
call mtr.add_suppression("Charset id.*trying to replace");
--enable_query_log
--disable_warnings
drop table if exists t1;
--enable_warnings
@ -602,3 +606,12 @@ SELECT 'chž'< 'i';
--error ER_UNKNOWN_COLLATION
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
--echo #
--echo # MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
--echo #
SHOW COLLATION LIKE 'latin1_test_replace';
--error ER_UNKNOWN_COLLATION
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;

View File

@ -362,7 +362,14 @@
<alias>iso_8859-1:1987</alias>
<alias>l1</alias>
<alias>latin1</alias>
<collation name="latin1_test" id="99" order="test"/>
<!--
The server rejects binding an existing built-in collation
to a different character set through Index.xml.
This example tries to override cp1250_polish_ci with id 99
and bind it to latin1:
-->
<collation name="latin1_test_replace" id="99"/>
<collation name="latin1_test" id="331" order="test"/>
<collation name="latin1_test2" id="332" order="test"/>
<collation name="latin1_test2_cs" id="333"/>
<collation name="latin1_swedish_nopad2_ci" id="334" flag="nopad">

View File

@ -383,7 +383,7 @@ Bug#46448 trailing spaces are not ignored when user collation maps space != 0x20
set names latin1;
show collation like 'latin1_test';
Collation Charset Id Default Compiled Sortlen
latin1_test latin1 99 Yes 1
latin1_test latin1 331 1
select "foo" = "foo " collate latin1_test;
"foo" = "foo " collate latin1_test
1
@ -402,6 +402,7 @@ utf8mb4_test_ci utf8mb4 326 8
utf16_test_ci utf16 327 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
latin1_swedish_nopad2_ci latin1 334 1
@ -426,7 +427,7 @@ utf32_test_ci utf32 391 8
utf8_maxuserid_ci utf8 2047 8
show collation like '%test%';
Collation Charset Id Default Compiled Sortlen
latin1_test latin1 99 Yes 1
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
utf8_test_ci utf8 353 8

View File

@ -13,6 +13,7 @@ drop table if exists t1;
--disable_query_log
call mtr.add_suppression("Syntax error at '\\[strength tertiary\\]'");
call mtr.add_suppression("Can't reset before a primary ignorable character U\\+A48C");
call mtr.add_suppression("Charset id.*trying to replace");
--enable_query_log
--echo In the following tests we change the order of letter "b"

View File

@ -469,7 +469,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused)))
/* Copy compiled charsets */
for (cs=compiled_charsets; cs->name; cs++)
add_compiled_collation((struct charset_info_st *) cs);
add_compiled_extra_collation((struct charset_info_st *) cs);
return FALSE;
}

View File

@ -20,6 +20,7 @@
#include <m_ctype.h>
#include <m_string.h>
#include <my_dir.h>
#include <hash.h>
#include <my_xml.h>
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
@ -28,6 +29,8 @@
#include <locale.h>
#endif
extern HASH charset_name_hash;
/*
The code below implements this functionality:
@ -38,15 +41,10 @@
- Setting server default character set
*/
my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2)
{
return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname));
}
static uint
get_collation_number_internal(const char *name)
{
CHARSET_INFO **cs;
for (cs= all_charsets;
cs < all_charsets + array_elements(all_charsets);
@ -72,11 +70,10 @@ static my_bool init_state_maps(struct charset_info_st *cs)
uchar *state_map;
uchar *ident_map;
if (!(cs->state_map= state_map= (uchar*) my_once_alloc(256, MYF(MY_WME))))
if (!(cs->state_map= state_map= (uchar*) my_once_alloc(256*2, MYF(MY_WME))))
return 1;
if (!(cs->ident_map= ident_map= (uchar*) my_once_alloc(256, MYF(MY_WME))))
return 1;
cs->ident_map= ident_map= state_map + 256;
/* Fill state_map with states to get a faster parser */
for (i=0; i < 256 ; i++)
@ -153,7 +150,8 @@ static int cs_copy_data(struct charset_info_st *to, CHARSET_INFO *from)
{
to->number= from->number ? from->number : to->number;
if (from->csname)
/* Don't replace csname if already set */
if (from->csname && !to->csname)
if (!(to->csname= my_once_strdup(from->csname,MYF(MY_WME))))
goto err;
@ -322,7 +320,21 @@ static int add_collation(struct charset_info_st *cs)
return MY_XML_ERROR;
bzero(newcs,sizeof(CHARSET_INFO));
}
else
{
/* Don't allow change of csname */
if (newcs->csname && strcmp(newcs->csname, cs->csname))
{
my_error(EE_DUPLICATE_CHARSET, MYF(ME_WARNING),
cs->number, cs->csname, newcs->csname);
/*
Continue parsing rest of Index.xml. We got an warning in the log
so the user can fix the wrong character set definition.
*/
return MY_XML_OK;
}
}
if (cs->primary_number == cs->number)
cs->state |= MY_CS_PRIMARY;
@ -402,8 +414,8 @@ static int add_collation(struct charset_info_st *cs)
{
newcs->state |= MY_CS_LOADED;
}
newcs->state|= MY_CS_AVAILABLE;
}
add_compiled_extra_collation(newcs);
}
else
{
@ -420,7 +432,7 @@ static int add_collation(struct charset_info_st *cs)
if (cs->comment)
if (!(newcs->comment= my_once_strdup(cs->comment,MYF(MY_WME))))
return MY_XML_ERROR;
if (cs->csname)
if (cs->csname && ! newcs->csname)
if (!(newcs->csname= my_once_strdup(cs->csname,MYF(MY_WME))))
return MY_XML_ERROR;
if (cs->name)
@ -557,14 +569,55 @@ char *get_charsets_dir(char *buf)
CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE]={NULL};
CHARSET_INFO *default_charset_info = &my_charset_latin1;
/*
Add standard character set compiled into the application
All related character sets should share same cname
*/
void add_compiled_collation(struct charset_info_st *cs)
{
DBUG_ASSERT(cs->number < array_elements(all_charsets));
all_charsets[cs->number]= cs;
cs->state|= MY_CS_AVAILABLE;
if ((my_hash_insert(&charset_name_hash, (uchar*) cs)))
{
#ifndef DBUG_OFF
CHARSET_INFO *org= (CHARSET_INFO*) my_hash_search(&charset_name_hash,
(uchar*) cs->csname,
strlen(cs->csname));
DBUG_ASSERT(org);
DBUG_ASSERT(org->csname == cs->csname);
#endif
}
}
/*
Add optional characters sets from ctype-extra.c
If cname is already in use, replace csname in new object with a pointer to
the already used csname to ensure that all csname's points to the same string
for the same character set.
*/
void add_compiled_extra_collation(struct charset_info_st *cs)
{
DBUG_ASSERT(cs->number < array_elements(all_charsets));
all_charsets[cs->number]= cs;
cs->state|= MY_CS_AVAILABLE;
if ((my_hash_insert(&charset_name_hash, (uchar*) cs)))
{
CHARSET_INFO *org= (CHARSET_INFO*) my_hash_search(&charset_name_hash,
(uchar*) cs->csname,
strlen(cs->csname));
cs->csname= org->csname;
}
}
static my_pthread_once_t charsets_initialized= MY_PTHREAD_ONCE_INIT;
static my_pthread_once_t charsets_template= MY_PTHREAD_ONCE_INIT;
@ -612,14 +665,31 @@ const char *my_collation_get_tailoring(uint id)
}
HASH charset_name_hash;
static uchar *get_charset_key(const uchar *object,
size_t *size,
my_bool not_used __attribute__((unused)))
{
CHARSET_INFO *cs= (CHARSET_INFO*) object;
*size= strlen(cs->csname);
return (uchar*) cs->csname;
}
static void init_available_charsets(void)
{
char fname[FN_REFLEN + sizeof(MY_CHARSET_INDEX)];
struct charset_info_st **cs;
MY_CHARSET_LOADER loader;
DBUG_ENTER("init_available_charsets");
bzero((char*) &all_charsets,sizeof(all_charsets));
bzero((char*) &my_collation_statistics, sizeof(my_collation_statistics));
my_hash_init2(key_memory_charsets, &charset_name_hash, 16,
&my_charset_latin1, 64, 0, 0, get_charset_key,
0, 0, HASH_UNIQUE);
init_compiled_charsets(MYF(0));
/* Copy compiled charsets */
@ -640,12 +710,14 @@ static void init_available_charsets(void)
my_charset_loader_init_mysys(&loader);
strmov(get_charsets_dir(fname), MY_CHARSET_INDEX);
my_read_charset_file(&loader, fname, MYF(0));
DBUG_VOID_RETURN;
}
void free_charsets(void)
{
charsets_initialized= charsets_template;
my_hash_free(&charset_name_hash);
}
@ -1431,4 +1503,4 @@ const char* my_default_csname()
csname = my_os_charset_to_mysql_charset(csname);
#endif
return csname ? csname : MYSQL_DEFAULT_CHARSET_NAME;
}
}

View File

@ -58,7 +58,8 @@ const char *globerrs[GLOBERRS]=
"Warning: Can't copy ownership for file '%s' (Errcode: %M)",
"Failed to release memory pointer %p, %zu bytes (Errcode: %M)",
"Lock Pages in memory access rights required",
"Memcntl %s cmd %s error"
"Memcntl %s cmd %s error",
"Warning: Charset id '%d' csname '%s' trying to replace existing csname '%s'",
};
void init_glob_errs(void)
@ -107,6 +108,7 @@ void init_glob_errs()
EE(EE_BADMEMORYRELEASE)= "Failed to release memory pointer %p, %zu bytes (Errcode: %M)";
EE(EE_PERM_LOCK_MEMORY)= "Lock Pages in memory access rights required";
EE(EE_MEMCNTL) = "Memcntl %s cmd %s error";
EE(EE_DUPLICATE_CHARSET)= "Warning: Charset id %d trying to replace csname %s with %s";
}
#endif

View File

@ -47,6 +47,7 @@ PSI_memory_key key_memory_my_compress_alloc;
PSI_memory_key key_memory_my_err_head;
PSI_memory_key key_memory_my_file_info;
PSI_memory_key key_memory_pack_frm;
PSI_memory_key key_memory_charsets;
#ifdef _WIN32
PSI_memory_key key_memory_win_SECURITY_ATTRIBUTES;

View File

@ -87,6 +87,7 @@ extern PSI_memory_key key_memory_my_compress_alloc;
extern PSI_memory_key key_memory_my_err_head;
extern PSI_memory_key key_memory_my_file_info;
extern PSI_memory_key key_memory_pack_frm;
extern PSI_memory_key key_memory_charsets;
#ifdef _WIN32
extern PSI_memory_key key_memory_win_SECURITY_ATTRIBUTES;

View File

@ -32,6 +32,8 @@
#ifdef HAVE_CHARSET_big5
const char charset_name_big5[]= "big5";
/*
Support for Chinese(BIG5) characters, by jou@nematic.ieo.nctu.edu.tw
CP950 and HKSCS additional characters are also accepted.
@ -6807,7 +6809,7 @@ struct charset_info_st my_charset_big5_chinese_ci=
{
1,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"big5", /* cs name */
charset_name_big5, /* cs name */
"big5_chinese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -6840,7 +6842,7 @@ struct charset_info_st my_charset_big5_bin=
{
84,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"big5", /* cs name */
charset_name_big5, /* cs name */
"big5_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -6873,7 +6875,7 @@ struct charset_info_st my_charset_big5_chinese_nopad_ci=
{
MY_NOPAD_ID(1),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */
"big5", /* cs name */
charset_name_big5, /* cs name */
"big5_chinese_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -6906,7 +6908,7 @@ struct charset_info_st my_charset_big5_nopad_bin=
{
MY_NOPAD_ID(84),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"big5", /* cs name */
charset_name_big5, /* cs name */
"big5_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -23,6 +23,8 @@
#include "strings_def.h"
#include <m_ctype.h>
const char charset_name_binary[]= "binary";
static const uchar ctype_bin[]=
{
0,
@ -568,7 +570,7 @@ struct charset_info_st my_charset_bin =
{
63,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY|MY_CS_NOPAD,/* state */
"binary", /* cs name */
charset_name_binary, /* cs name */
"binary", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -22,6 +22,7 @@
#ifdef HAVE_CHARSET_cp932
const char charset_name_cp932[]= "cp932";
/*
* This comment is parsed by configure to create ctype.c,
@ -34764,8 +34765,8 @@ struct charset_info_st my_charset_cp932_japanese_ci=
{
95,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"cp932", /* cs name */
"cp932_japanese_ci", /* name */
charset_name_cp932, /* cs name */
"cp932_japanese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
ctype_cp932,
@ -34796,8 +34797,8 @@ struct charset_info_st my_charset_cp932_bin=
{
96,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"cp932", /* cs name */
"cp932_bin", /* name */
charset_name_cp932, /* cs name */
"cp932_bin", /* name */
"", /* comment */
NULL, /* tailoring */
ctype_cp932,
@ -34829,7 +34830,7 @@ struct charset_info_st my_charset_cp932_japanese_nopad_ci=
{
MY_NOPAD_ID(95),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */
"cp932", /* cs name */
charset_name_cp932, /* cs name */
"cp932_japanese_nopad_ci",/* name */
"", /* comment */
NULL, /* tailoring */
@ -34861,7 +34862,7 @@ struct charset_info_st my_charset_cp932_nopad_bin=
{
MY_NOPAD_ID(96),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"cp932", /* cs name */
charset_name_cp932, /* cs name */
"cp932_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -625,7 +625,7 @@ struct charset_info_st my_charset_latin2_czech_ci =
2,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT|
MY_CS_STRNXFRM_BAD_NWEIGHTS|MY_CS_NON1TO1, /* state */
"latin2", /* cs name */
charset_name_latin2, /* cs name */
"latin2_czech_cs", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -31,6 +31,7 @@
#ifdef HAVE_CHARSET_euckr
const char charset_name_euckr[]= "euckr";
static const uchar ctype_euc_kr[257] =
{
@ -10054,7 +10055,7 @@ struct charset_info_st my_charset_euckr_korean_ci=
{
19,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"euckr", /* cs name */
charset_name_euckr, /* cs name */
"euckr_korean_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -10087,7 +10088,7 @@ struct charset_info_st my_charset_euckr_bin=
{
85,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"euckr", /* cs name */
charset_name_euckr, /* cs name */
"euckr_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -10120,7 +10121,7 @@ struct charset_info_st my_charset_euckr_korean_nopad_ci=
{
MY_NOPAD_ID(19),0,0,/* number */
MY_CS_COMPILED|MY_CS_NOPAD, /* state */
"euckr", /* cs name */
charset_name_euckr, /* cs name */
"euckr_korean_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -10153,7 +10154,7 @@ struct charset_info_st my_charset_euckr_nopad_bin=
{
MY_NOPAD_ID(85),0,0,/* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"euckr", /* cs name */
charset_name_euckr, /* cs name */
"euckr_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -33,6 +33,8 @@ ctype-ujis.c file.
#ifdef HAVE_CHARSET_eucjpms
const char charset_name_eucjpms[]= "eucjpms";
static const uchar ctype_eucjpms[257] =
{
@ -67593,7 +67595,7 @@ struct charset_info_st my_charset_eucjpms_japanese_ci=
{
97,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"eucjpms", /* cs name */
charset_name_eucjpms, /* cs name */
"eucjpms_japanese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67626,7 +67628,7 @@ struct charset_info_st my_charset_eucjpms_bin=
{
98,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"eucjpms", /* cs name */
charset_name_eucjpms, /* cs name */
"eucjpms_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67659,7 +67661,7 @@ struct charset_info_st my_charset_eucjpms_japanese_nopad_ci=
{
MY_NOPAD_ID(97),0,0, /* number */
MY_CS_COMPILED|MY_CS_NOPAD,/* state */
"eucjpms", /* cs name */
charset_name_eucjpms, /* cs name */
"eucjpms_japanese_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67692,7 +67694,7 @@ struct charset_info_st my_charset_eucjpms_nopad_bin=
{
MY_NOPAD_ID(98),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"eucjpms", /* cs name */
charset_name_eucjpms, /* cs name */
"eucjpms_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -29,6 +29,8 @@
#ifdef HAVE_CHARSET_gb2312
const char charset_name_gb2312[]= "gb2312";
static const uchar ctype_gb2312[257] =
{
0, /* For standard library */
@ -6459,7 +6461,7 @@ struct charset_info_st my_charset_gb2312_chinese_ci=
{
24,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"gb2312", /* cs name */
charset_name_gb2312, /* cs name */
"gb2312_chinese_ci",/* name */
"", /* comment */
NULL, /* tailoring */
@ -6492,7 +6494,7 @@ struct charset_info_st my_charset_gb2312_bin=
{
86,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"gb2312", /* cs name */
charset_name_gb2312, /* cs name */
"gb2312_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -6525,7 +6527,7 @@ struct charset_info_st my_charset_gb2312_chinese_nopad_ci=
{
MY_NOPAD_ID(24),0,0,/* number */
MY_CS_COMPILED|MY_CS_NOPAD, /* state */
"gb2312", /* cs name */
charset_name_gb2312, /* cs name */
"gb2312_chinese_nopad_ci",/* name */
"", /* comment */
NULL, /* tailoring */
@ -6558,7 +6560,7 @@ struct charset_info_st my_charset_gb2312_nopad_bin=
{
MY_NOPAD_ID(86),0,0,/* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"gb2312", /* cs name */
charset_name_gb2312, /* cs name */
"gb2312_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -31,6 +31,7 @@
#ifdef HAVE_CHARSET_gbk
const char charset_name_gbk[]= "gbk";
/* Support for Chinese(GBK) characters, by hewei@mail.ied.ac.cn */
@ -10741,7 +10742,7 @@ struct charset_info_st my_charset_gbk_chinese_ci=
{
28,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */
"gbk", /* cs name */
charset_name_gbk, /* cs name */
"gbk_chinese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -10773,7 +10774,7 @@ struct charset_info_st my_charset_gbk_bin=
{
87,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"gbk", /* cs name */
charset_name_gbk, /* cs name */
"gbk_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -10806,7 +10807,7 @@ struct charset_info_st my_charset_gbk_chinese_nopad_ci=
{
MY_NOPAD_ID(28),0,0,/* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */
"gbk", /* cs name */
charset_name_gbk, /* cs name */
"gbk_chinese_nopad_ci",/* name */
"", /* comment */
NULL, /* tailoring */
@ -10838,7 +10839,7 @@ struct charset_info_st my_charset_gbk_nopad_bin=
{
MY_NOPAD_ID(87),0,0,/* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"gbk", /* cs name */
charset_name_gbk, /* cs name */
"gbk_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -18,6 +18,8 @@
#include "strings_def.h"
#include <m_ctype.h>
const char charset_name_latin1[]= "latin1";
static const uchar ctype_latin1[] = {
0,
32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
@ -431,7 +433,7 @@ struct charset_info_st my_charset_latin1=
{
8,0,0, /* number */
MY_CS_COMPILED | MY_CS_PRIMARY, /* state */
"latin1", /* cs name */
charset_name_latin1, /* cs name */
"latin1_swedish_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -464,7 +466,7 @@ struct charset_info_st my_charset_latin1_nopad=
{
MY_NOPAD_ID(8),0,0, /* number */
MY_CS_COMPILED | MY_CS_NOPAD, /* state */
"latin1", /* cs name */
charset_name_latin1, /* cs name */
"latin1_swedish_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -742,7 +744,7 @@ struct charset_info_st my_charset_latin1_german2_ci=
{
31,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NON1TO1, /* state */
"latin1", /* cs name */
charset_name_latin1, /* cs name */
"latin1_german2_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -775,7 +777,7 @@ struct charset_info_st my_charset_latin1_bin=
{
47,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"latin1", /* cs name */
charset_name_latin1, /* cs name */
"latin1_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -808,7 +810,7 @@ struct charset_info_st my_charset_latin1_nopad_bin=
{
MY_NOPAD_ID(47),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,/* state */
"latin1", /* cs name */
charset_name_latin1, /* cs name */
"latin1_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -22,6 +22,7 @@
#ifdef HAVE_CHARSET_sjis
const char charset_name_sjis[]= "sjis";
/*
* This comment is parsed by configure to create ctype.c,
@ -34152,7 +34153,7 @@ struct charset_info_st my_charset_sjis_japanese_ci=
{
13,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_NONASCII, /* state */
"sjis", /* cs name */
charset_name_sjis, /* cs name */
"sjis_japanese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -34184,7 +34185,7 @@ struct charset_info_st my_charset_sjis_bin=
{
88,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII, /* state */
"sjis", /* cs name */
charset_name_sjis, /* cs name */
"sjis_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -34217,7 +34218,7 @@ struct charset_info_st my_charset_sjis_japanese_nopad_ci=
{
MY_NOPAD_ID(13),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NONASCII|MY_CS_NOPAD, /* state */
"sjis", /* cs name */
charset_name_sjis, /* cs name */
"sjis_japanese_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -34249,7 +34250,7 @@ struct charset_info_st my_charset_sjis_nopad_bin=
{
MY_NOPAD_ID(88),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII|MY_CS_NOPAD, /* state */
"sjis", /* cs name */
charset_name_sjis, /* cs name */
"sjis_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -40,6 +40,8 @@
#ifdef HAVE_CHARSET_tis620
const char charset_name_tis620[]= "tis620";
#define M L_MIDDLE
#define U L_UPPER
#define L L_LOWER
@ -914,7 +916,7 @@ struct charset_info_st my_charset_tis620_thai_ci=
{
18,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_NON1TO1, /* state */
"tis620", /* cs name */
charset_name_tis620, /* cs name */
"tis620_thai_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -946,7 +948,7 @@ struct charset_info_st my_charset_tis620_bin=
{
89,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"tis620", /* cs name */
charset_name_tis620, /* cs name */
"tis620_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -979,7 +981,7 @@ struct charset_info_st my_charset_tis620_thai_nopad_ci=
{
MY_NOPAD_ID(18),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NON1TO1|MY_CS_NOPAD, /* state */
"tis620", /* cs name */
charset_name_tis620, /* cs name */
"tis620_thai_nopad_ci",/* name */
"", /* comment */
NULL, /* tailoring */
@ -1012,7 +1014,7 @@ struct charset_info_st my_charset_tis620_nopad_bin=
{
MY_NOPAD_ID(89),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"tis620", /* cs name */
charset_name_tis620, /* cs name */
"tis620_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

File diff suppressed because it is too large Load Diff

View File

@ -35,7 +35,6 @@
#define HAVE_CHARSET_mb2_or_mb4
#endif
#ifndef EILSEQ
#define EILSEQ ENOENT
#endif
@ -1278,6 +1277,7 @@ my_uni_utf16(CHARSET_INFO *cs __attribute__((unused)),
#ifdef HAVE_CHARSET_utf16
const char charset_name_utf16le[]= "utf16le";
static inline void
my_tolower_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
@ -1599,7 +1599,7 @@ struct charset_info_st my_charset_utf16_general_ci=
{
54,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf16", /* cs name */
charset_name_utf16, /* cs name */
"utf16_general_ci", /* name */
"UTF-16 Unicode", /* comment */
NULL, /* tailoring */
@ -1632,7 +1632,7 @@ struct charset_info_st my_charset_utf16_bin=
{
55,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf16", /* cs name */
charset_name_utf16, /* cs name */
"utf16_bin", /* name */
"UTF-16 Unicode", /* comment */
NULL, /* tailoring */
@ -1665,7 +1665,7 @@ struct charset_info_st my_charset_utf16_general_nopad_ci=
{
MY_NOPAD_ID(54),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD,
"utf16", /* cs name */
charset_name_utf16, /* cs name */
"utf16_general_nopad_ci", /* name */
"UTF-16 Unicode", /* comment */
NULL, /* tailoring */
@ -1699,7 +1699,7 @@ struct charset_info_st my_charset_utf16_nopad_bin=
MY_NOPAD_ID(55),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|
MY_CS_NOPAD,
"utf16", /* cs name */
charset_name_utf16, /* cs name */
"utf16_nopad_bin", /* name */
"UTF-16 Unicode", /* comment */
NULL, /* tailoring */
@ -1940,7 +1940,7 @@ struct charset_info_st my_charset_utf16le_general_ci=
{
56,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf16le", /* cs name */
charset_name_utf16le, /* cs name */
"utf16le_general_ci",/* name */
"UTF-16LE Unicode", /* comment */
NULL, /* tailoring */
@ -1973,7 +1973,7 @@ struct charset_info_st my_charset_utf16le_bin=
{
62,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf16le", /* cs name */
charset_name_utf16le, /* cs name */
"utf16le_bin", /* name */
"UTF-16LE Unicode", /* comment */
NULL, /* tailoring */
@ -2006,7 +2006,7 @@ struct charset_info_st my_charset_utf16le_general_nopad_ci=
{
MY_NOPAD_ID(56),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD,
"utf16le", /* cs name */
charset_name_utf16le, /* cs name */
"utf16le_general_nopad_ci",/* name */
"UTF-16LE Unicode", /* comment */
NULL, /* tailoring */
@ -2040,7 +2040,7 @@ struct charset_info_st my_charset_utf16le_nopad_bin=
MY_NOPAD_ID(62),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|
MY_CS_NOPAD,
"utf16le", /* cs name */
charset_name_utf16le, /* cs name */
"utf16le_nopad_bin", /* name */
"UTF-16LE Unicode", /* comment */
NULL, /* tailoring */
@ -2763,7 +2763,7 @@ struct charset_info_st my_charset_utf32_general_ci=
{
60,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf32", /* cs name */
charset_name_utf32, /* cs name */
"utf32_general_ci", /* name */
"UTF-32 Unicode", /* comment */
NULL, /* tailoring */
@ -2796,7 +2796,7 @@ struct charset_info_st my_charset_utf32_bin=
{
61,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"utf32", /* cs name */
charset_name_utf32, /* cs name */
"utf32_bin", /* name */
"UTF-32 Unicode", /* comment */
NULL, /* tailoring */
@ -2829,7 +2829,7 @@ struct charset_info_st my_charset_utf32_general_nopad_ci=
{
MY_NOPAD_ID(60),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD,
"utf32", /* cs name */
charset_name_utf32, /* cs name */
"utf32_general_nopad_ci", /* name */
"UTF-32 Unicode", /* comment */
NULL, /* tailoring */
@ -2863,7 +2863,7 @@ struct charset_info_st my_charset_utf32_nopad_bin=
MY_NOPAD_ID(61),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|
MY_CS_NOPAD,
"utf32", /* cs name */
charset_name_utf32, /* cs name */
"utf32_nopad_bin", /* name */
"UTF-32 Unicode", /* comment */
NULL, /* tailoring */
@ -3354,7 +3354,7 @@ struct charset_info_st my_charset_ucs2_general_ci=
{
35,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII,
"ucs2", /* cs name */
charset_name_ucs2, /* cs name */
"ucs2_general_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -3387,7 +3387,7 @@ struct charset_info_st my_charset_ucs2_general_mysql500_ci=
{
159, 0, 0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, /* state */
"ucs2", /* cs name */
charset_name_ucs2, /* cs name */
"ucs2_general_mysql500_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -3420,7 +3420,7 @@ struct charset_info_st my_charset_ucs2_bin=
{
90,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII,
"ucs2", /* cs name */
charset_name_ucs2, /* cs name */
"ucs2_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -3453,7 +3453,7 @@ struct charset_info_st my_charset_ucs2_general_nopad_ci=
{
MY_NOPAD_ID(35),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD,
"ucs2", /* cs name */
charset_name_ucs2, /* cs name */
"ucs2_general_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -3486,7 +3486,7 @@ struct charset_info_st my_charset_ucs2_nopad_bin=
{
MY_NOPAD_ID(90),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD,
"ucs2", /* cs name */
charset_name_ucs2, /* cs name */
"ucs2_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -32,6 +32,7 @@
#ifdef HAVE_CHARSET_ujis
const char charset_name_ujis[]= "ujis";
static const uchar ctype_ujis[257] =
{
@ -67337,7 +67338,7 @@ struct charset_info_st my_charset_ujis_japanese_ci=
{
12,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY, /* state */
"ujis", /* cs name */
charset_name_ujis, /* cs name */
"ujis_japanese_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67370,7 +67371,7 @@ struct charset_info_st my_charset_ujis_bin=
{
91,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT, /* state */
"ujis", /* cs name */
charset_name_ujis, /* cs name */
"ujis_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67403,7 +67404,7 @@ struct charset_info_st my_charset_ujis_japanese_nopad_ci=
{
MY_NOPAD_ID(12),0,0,/* number */
MY_CS_COMPILED|MY_CS_NOPAD, /* state */
"ujis", /* cs name */
charset_name_ujis, /* cs name */
"ujis_japanese_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -67436,7 +67437,7 @@ struct charset_info_st my_charset_ujis_nopad_bin=
{
MY_NOPAD_ID(91),0,0,/* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */
"ujis", /* cs name */
charset_name_ujis, /* cs name */
"ujis_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -5473,7 +5473,7 @@ struct charset_info_st my_charset_utf8mb3_general_ci=
{
33,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_general_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -5506,7 +5506,7 @@ struct charset_info_st my_charset_utf8mb3_general_mysql500_ci=
{
223,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_general_mysql500_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -5539,7 +5539,7 @@ struct charset_info_st my_charset_utf8mb3_bin=
{
83,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE, /* state */
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -5572,7 +5572,7 @@ struct charset_info_st my_charset_utf8mb3_general_nopad_ci=
{
MY_NOPAD_ID(33),0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NOPAD, /* state */
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_general_nopad_ci", /* name */
"", /* comment */
NULL, /* tailoring */
@ -5605,7 +5605,7 @@ struct charset_info_st my_charset_utf8mb3_nopad_bin=
{
MY_NOPAD_ID(83),0,0,/* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NOPAD,
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_nopad_bin", /* name */
"", /* comment */
NULL, /* tailoring */
@ -5767,7 +5767,7 @@ struct charset_info_st my_charset_utf8mb3_general_cs=
{
254,0,0, /* number */
MY_CS_COMPILED|MY_CS_UNICODE, /* state */
MY_UTF8MB3, /* cs name */
charset_name_utf8, /* cs name */
MY_UTF8MB3 "_general_cs", /* name */
"", /* comment */
NULL, /* tailoring */
@ -7809,7 +7809,7 @@ struct charset_info_st my_charset_utf8mb4_general_ci=
{
45,0,0, /* number */
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT, /* state */
MY_UTF8MB4, /* cs name */
charset_name_utf8mb4, /* cs name */
MY_UTF8MB4_GENERAL_CI,/* name */
"UTF-8 Unicode", /* comment */
NULL, /* tailoring */
@ -7843,7 +7843,7 @@ struct charset_info_st my_charset_utf8mb4_bin=
46,0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|
MY_CS_UNICODE_SUPPLEMENT, /* state */
MY_UTF8MB4, /* cs name */
charset_name_utf8mb4, /* cs name */
MY_UTF8MB4_BIN, /* name */
"UTF-8 Unicode", /* comment */
NULL, /* tailoring */
@ -7877,7 +7877,7 @@ struct charset_info_st my_charset_utf8mb4_general_nopad_ci=
MY_NOPAD_ID(45),0,0,/* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT|
MY_CS_NOPAD, /* state */
MY_UTF8MB4, /* cs name */
charset_name_utf8mb4, /* cs name */
MY_UTF8MB4_GENERAL_NOPAD_CI,/* name */
"UTF-8 Unicode", /* comment */
NULL, /* tailoring */
@ -7911,7 +7911,7 @@ struct charset_info_st my_charset_utf8mb4_nopad_bin=
MY_NOPAD_ID(46),0,0, /* number */
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|
MY_CS_UNICODE_SUPPLEMENT|MY_CS_NOPAD, /* state */
MY_UTF8MB4, /* cs name */
charset_name_utf8mb4, /* cs name */
MY_UTF8MB4_NOPAD_BIN, /* name */
"UTF-8 Unicode", /* comment */
NULL, /* tailoring */

View File

@ -52,6 +52,7 @@
#ifdef HAVE_CHARSET_cp1250
const char charset_name_cp1250[]= "cp1250";
static const uint16 tab_cp1250_uni[256]={
0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
@ -690,7 +691,7 @@ struct charset_info_st my_charset_cp1250_czech_ci =
34,0,0, /* number */
MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT|
MY_CS_STRNXFRM_BAD_NWEIGHTS|MY_CS_NON1TO1, /* state */
"cp1250", /* cs name */
charset_name_cp1250, /* cs name */
"cp1250_czech_cs", /* name */
"", /* comment */
NULL, /* tailoring */

View File

@ -36,6 +36,12 @@
*/
const char charset_name_latin2[]= "latin2";
const char charset_name_utf8[]= "utf8";
const char charset_name_utf16[]= "utf16";
const char charset_name_utf32[]= "utf32";
const char charset_name_ucs2[]= "ucs2";
const char charset_name_utf8mb4[]= "utf8mb4";
/*
Avoid using my_snprintf

View File

@ -130,4 +130,13 @@ int my_wc_to_printable_generic(CHARSET_INFO *cs, my_wc_t wc,
int my_wc_to_printable_8bit(CHARSET_INFO *cs, my_wc_t wc,
uchar *s, uchar *e);
/* Some common character set names */
extern const char charset_name_latin2[];
extern const char charset_name_utf8[];
extern const char charset_name_utf16[];
extern const char charset_name_utf32[];
extern const char charset_name_ucs2[];
extern const char charset_name_ucs2[];
extern const char charset_name_utf8mb4[];
#endif /*STRINGS_DEF_INCLUDED */