summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authorbar@bar.mysql.r18.ru <>2003-03-04 12:33:52 +0400
committerbar@bar.mysql.r18.ru <>2003-03-04 12:33:52 +0400
commit6cbbbd69485ec0547db127e439c113481d31f1d5 (patch)
tree3667f04b4e731d43aed2a2e5149a8a1e259518bd /sql/field.cc
parentc4dc670d6127cc8129ce57a2bc3ab76538776ad4 (diff)
downloadmariadb-git-6cbbbd69485ec0547db127e439c113481d31f1d5.tar.gz
Fix for SHOW, it didn't display CHARACTER SET and COLLATE clause
for binary collations
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/sql/field.cc b/sql/field.cc
index b96b987ec90..5a8cbdfbb1c 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -248,7 +248,7 @@ void Field_str::make_field(Send_field *field)
void Field_str::add_binary_or_charset(String &res) const
{
- if (binary())
+ if (charset() == &my_charset_bin)
res.append(" binary");
else if (field_charset != table->table_charset &&
!(current_thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS) &&
@@ -3875,13 +3875,18 @@ void Field_datetime::sql_type(String &res) const
/* Copy a string and fill with space */
+static bool use_conversion(CHARSET_INFO *cs1, CHARSET_INFO *cs2)
+{
+ return (cs1 != &my_charset_bin) && (cs2 != &my_charset_bin) && (cs1!=cs2);
+}
+
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()))
+ if (use_conversion(cs, field_charset))
{
tmpstr.copy(from, length, cs, field_charset);
from= tmpstr.ptr();
@@ -4063,7 +4068,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
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()))
+ if (use_conversion(cs, field_charset))
{
tmpstr.copy(from, length, cs, field_charset);
from= tmpstr.ptr();
@@ -4380,7 +4385,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
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()))
+ if (use_conversion(cs, field_charset))
{
tmpstr.copy(from, length, cs, field_charset);
from= tmpstr.ptr();
@@ -4627,7 +4632,7 @@ void Field_blob::sql_type(String &res) const
case 4: str="long"; length=4; break;
}
res.set_latin1(str,length);
- if (binary())
+ if (charset() == &my_charset_bin)
res.append("blob");
else
{
@@ -4857,7 +4862,7 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
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()))
+ if (use_conversion(cs, field_charset))
{
tmpstr.copy(from, length, cs, field_charset);
from= tmpstr.ptr();
@@ -5072,7 +5077,7 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs)
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()))
+ if (use_conversion(cs, field_charset))
{
tmpstr.copy(from, length, cs, field_charset);
from= tmpstr.ptr();