diff options
author | unknown <bar@bar.mysql.r18.ru> | 2003-02-27 12:10:41 +0400 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2003-02-27 12:10:41 +0400 |
commit | 14231ff5d5949857a854b9beaffc12cf5a958eb0 (patch) | |
tree | 0202b8977364cd00a3d4951222a66459df7773ef /sql/field.cc | |
parent | 4d36263ea81612e117fc590693c0c15b2978d93c (diff) | |
download | mariadb-git-14231ff5d5949857a854b9beaffc12cf5a958eb0.tar.gz |
field.cc:
Now all text fields convert data into proper charset before storing
sql/field.cc:
Now all text fields convert data into proper charset before storing
Diffstat (limited to 'sql/field.cc')
-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) { |