mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
Allow cp932 characters to be stored in a SJIS column
This commit is contained in:
parent
ffd77c4679
commit
8f82360081
4 changed files with 57 additions and 3 deletions
|
|
@ -4563,6 +4563,40 @@ uint my_numcells_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
|||
return clen;
|
||||
}
|
||||
|
||||
/*
|
||||
Returns a well formed length of a SJIS string.
|
||||
CP932 additional characters are also accepted.
|
||||
*/
|
||||
static
|
||||
uint my_well_formed_len_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
||||
const char *b, const char *e, uint pos)
|
||||
{
|
||||
const char *b0= b;
|
||||
while (pos && b < e)
|
||||
{
|
||||
/*
|
||||
Cast to int8 for extra safety.
|
||||
"char" can be unsigned by default
|
||||
on some platforms.
|
||||
*/
|
||||
if (((int8)b[0]) >= 0)
|
||||
{
|
||||
/* Single byte character */
|
||||
b+= 1;
|
||||
}
|
||||
else if (issjishead((uchar)*b) && (e-b)>1 && issjistail((uchar)b[1]))
|
||||
{
|
||||
/* Double byte character */
|
||||
b+= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Wrong byte sequence */
|
||||
break;
|
||||
}
|
||||
}
|
||||
return b - b0;
|
||||
}
|
||||
|
||||
|
||||
static MY_COLLATION_HANDLER my_collation_ci_handler =
|
||||
|
|
@ -4586,7 +4620,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
mbcharlen_sjis,
|
||||
my_numchars_mb,
|
||||
my_charpos_mb,
|
||||
my_well_formed_len_mb,
|
||||
my_well_formed_len_sjis,
|
||||
my_lengthsp_8bit,
|
||||
my_numcells_sjis,
|
||||
my_mb_wc_sjis, /* mb_wc */
|
||||
|
|
|
|||
|
|
@ -2126,8 +2126,13 @@ int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t)
|
|||
while (s[0] && t[0])
|
||||
{
|
||||
my_wc_t s_wc,t_wc;
|
||||
|
||||
if (s[0] >= 0)
|
||||
|
||||
/*
|
||||
Cast to int8 for extra safety.
|
||||
char can be unsigned by default
|
||||
on some platforms.
|
||||
*/
|
||||
if (((int8)s[0]) >= 0)
|
||||
{
|
||||
/*
|
||||
s[0] is between 0 and 127.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue