summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <igor@hundin.mysql.fi>2003-02-27 11:03:38 +0200
committerunknown <igor@hundin.mysql.fi>2003-02-27 11:03:38 +0200
commit98e8d472cffa79cf75dc30dc88cd33a4823e8d5e (patch)
tree55471c0799b31b256230f2088f54a54905ea9574 /sql
parent593b2fc23868bcbfb74e851055fa3a15f1415ad1 (diff)
parent14231ff5d5949857a854b9beaffc12cf5a958eb0 (diff)
downloadmariadb-git-98e8d472cffa79cf75dc30dc88cd33a4823e8d5e.tar.gz
Merge ibabaev@work.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/igor/dev/mysql-4.1
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc46
1 files changed, 45 insertions, 1 deletions
diff --git a/sql/field.cc b/sql/field.cc
index 58111bfbe5d..b96b987ec90 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -3878,6 +3878,15 @@ void Field_datetime::sql_type(String &res) const
int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
{
int error= 0;
+ char buff[80];
+ String tmpstr(buff,sizeof(buff), &my_charset_bin);
+ /* Convert character set if nesessary */
+ if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary()))
+ {
+ tmpstr.copy(from, length, cs, field_charset);
+ from= tmpstr.ptr();
+ length= tmpstr.length();
+ }
if (length <= field_length)
{
memcpy(ptr,from,length);
@@ -4051,6 +4060,15 @@ uint Field_string::max_packed_col_length(uint max_length)
int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
{
int error= 0;
+ char buff[80];
+ String tmpstr(buff,sizeof(buff), &my_charset_bin);
+ /* Convert character set if nesessary */
+ if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary()))
+ {
+ tmpstr.copy(from, length, cs, field_charset);
+ from= tmpstr.ptr();
+ length= tmpstr.length();
+ }
if (length > field_length)
{
length=field_length;
@@ -4359,6 +4377,15 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
}
else
{
+ char buff[80];
+ String tmpstr(buff,sizeof(buff), &my_charset_bin);
+ /* Convert character set if nesessary */
+ if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary()))
+ {
+ tmpstr.copy(from, length, cs, field_charset);
+ from= tmpstr.ptr();
+ length= tmpstr.length();
+ }
Field_blob::store_length(length);
if (table->copy_blobs || length <= MAX_FIELD_WIDTH)
{ // Must make a copy
@@ -4827,6 +4854,15 @@ uint find_enum(TYPELIB *lib,const char *x, uint length)
int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
{
int err= 0;
+ char buff[80];
+ String tmpstr(buff,sizeof(buff), &my_charset_bin);
+ /* Convert character set if nesessary */
+ if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary()))
+ {
+ tmpstr.copy(from, length, cs, field_charset);
+ from= tmpstr.ptr();
+ length= tmpstr.length();
+ }
uint tmp=find_enum(typelib,from,length);
if (!tmp)
{
@@ -5033,7 +5069,15 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs)
int err= 0;
char *not_used;
uint not_used2;
-
+ char buff[80];
+ String tmpstr(buff,sizeof(buff), &my_charset_bin);
+ /* Convert character set if nesessary */
+ if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary()))
+ {
+ tmpstr.copy(from, length, cs, field_charset);
+ from= tmpstr.ptr();
+ length= tmpstr.length();
+ }
ulonglong tmp= find_set(typelib, from, length, &not_used, &not_used2);
if (!tmp && length && length < 22)
{