diff options
author | unknown <igor@hundin.mysql.fi> | 2003-02-27 11:03:38 +0200 |
---|---|---|
committer | unknown <igor@hundin.mysql.fi> | 2003-02-27 11:03:38 +0200 |
commit | 98e8d472cffa79cf75dc30dc88cd33a4823e8d5e (patch) | |
tree | 55471c0799b31b256230f2088f54a54905ea9574 /sql | |
parent | 593b2fc23868bcbfb74e851055fa3a15f1415ad1 (diff) | |
parent | 14231ff5d5949857a854b9beaffc12cf5a958eb0 (diff) | |
download | mariadb-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.cc | 46 |
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, ¬_used, ¬_used2); if (!tmp && length && length < 22) { |