Commit cf59103d authored by unknown's avatar unknown
Browse files

BUG# 12123

Made change to mysqlimport to set character_set_database to binary to 
make importing various charsets/columns work correctly.


client/mysqlimport.c:
  BUG# 12123
  
  Added 'set @@character_set_database=binary' to make loading of tables with
  mixed charset types and non-latin characters load.
mysql-test/mysql-test-run.pl:
  BUG #12123
  
  Added $MYSQL_IMPORT in order to test mysqlimport bug.
mysql-test/mysql-test-run.sh:
  BUG #12123
  
  Added $MYSQL_IMPORT in order to test mysqlimport bug.
mysql-test/r/mysqldump.result:
  BUG #12123
  
  Added dumping and reloading (using mysql, mysqldump, and mysqlimport) to
  show that this fix handles dumping and reloading of non-latin1 charsets
  in table with different charset columns (mixing of charsets, also can be a
  UTF table with latin1 tables). Note the select before and after dump and 
  restore - should be exact.
mysql-test/t/mysqldump.test:
  BUG #12123
  
  Added dumping and reloading (using mysql, mysqldump, and mysqlimport) to
  show that this fix handles dumping and reloading of non-latin1 charsets
  in table with different charset columns (mixing of charsets, also can be a
  UTF table with latin1 tables). Note the select before and after dump and 
  restore - should be exact. (results of this)
parent 28421fe8
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -517,6 +517,13 @@ int main(int argc, char **argv)
    free_defaults(argv_to_free);
    return(1); /* purecov: deadcode */
  }

  if (mysql_query(sock, "set @@character_set_database=binary;"))
  {
    db_error(sock); /* We shall countinue here, if --force was given */
    return(1);
  }

  if (lock_tables)
    lock_table(sock, argc, argv);
  for (; *argv != NULL; argv++)
+11 −0
Original line number Diff line number Diff line
@@ -172,6 +172,7 @@ our $exe_mysqlbinlog;
our $exe_mysql_client_test;
our $exe_mysqld;
our $exe_mysqldump;              # Called from test case
our $exe_mysqlimport;              # Called from test case
our $exe_mysqlshow;              # Called from test case
our $exe_mysql_fix_system_tables;
our $exe_mysqltest;
@@ -861,6 +862,7 @@ sub executable_setup () {
		       "/usr/bin/false");
    }
    $exe_mysqldump=      mtr_exe_exists("$path_client_bindir/mysqldump");
    $exe_mysqlimport=      mtr_exe_exists("$path_client_bindir/mysqlimport");
    $exe_mysqlshow=      mtr_exe_exists("$path_client_bindir/mysqlshow");
    $exe_mysqlbinlog=    mtr_exe_exists("$path_client_bindir/mysqlbinlog");
    $exe_mysqladmin=     mtr_exe_exists("$path_client_bindir/mysqladmin");
@@ -2076,6 +2078,14 @@ sub run_mysqltest ($) {
    $cmdline_mysqldump .=
      " --debug=d:t:A,$opt_vardir/log/mysqldump.trace";
  }
  my $cmdline_mysqlimport= "$exe_mysqlimport -uroot " .
                         "--port=$master->[0]->{'path_myport'} " .
                         "--socket=$master->[0]->{'path_mysock'} --password=";
  if ( $opt_debug )
  {
    $cmdline_mysqlimport .=
      " --debug=d:t:A,$opt_vardir/log/mysqlimport.trace";
  }

  my $cmdline_mysqlshow= "$exe_mysqlshow -uroot " .
                         "--port=$master->[0]->{'path_myport'} " .
@@ -2126,6 +2136,7 @@ sub run_mysqltest ($) {

  $ENV{'MYSQL'}=                    $cmdline_mysql;
  $ENV{'MYSQL_DUMP'}=               $cmdline_mysqldump;
  $ENV{'MYSQL_IMPORT'}=             $cmdline_mysqlimport;
  $ENV{'MYSQL_SHOW'}=               $cmdline_mysqlshow;
  $ENV{'MYSQL_BINLOG'}=             $cmdline_mysqlbinlog;
  $ENV{'MYSQL_FIX_SYSTEM_TABLES'}=  $cmdline_mysql_fix_system_tables;
+8 −1
Original line number Diff line number Diff line
@@ -546,6 +546,11 @@ if [ x$SOURCE_DIST = x1 ] ; then
 else
   MYSQL_DUMP="$BASEDIR/client/mysqldump"
 fi
 if [ -f "$BASEDIR/client/.libs/mysqlimport" ] ; then
   MYSQL_IMPORT="$BASEDIR/client/.libs/mysqlimport"
 else
   MYSQL_IMPORT="$BASEDIR/client/mysqlimport"
 fi
 if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
   MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
 else
@@ -614,6 +619,7 @@ else
 fi
 MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
 MYSQL_DUMP="$CLIENT_BINDIR/mysqldump"
 MYSQL_IMPORT="$CLIENT_BINDIR/mysqlimport"
 MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
 MYSQLADMIN="$CLIENT_BINDIR/mysqladmin"
 WAIT_PID="$CLIENT_BINDIR/mysql_waitpid"
@@ -693,10 +699,11 @@ fi
MYSQL_DUMP_DIR="$MYSQL_DUMP"
export MYSQL_DUMP_DIR
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
MYSQL_IMPORT="$MYSQL_IMPORT -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR $EXTRA_MYSQLBINLOG_OPT"
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
MYSQL="$MYSQL --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD"
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
export MYSQL MYSQL_DUMP MYSQL_IMPORT MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
export NDB_TOOLS_DIR
export NDB_MGM
+10 −0
Original line number Diff line number Diff line
@@ -1493,3 +1493,13 @@ insert into t2 (a, b) values (NULL, NULL),(10, NULL),(NULL, "twenty"),(30, "thir
</database>
</mysqldump>
drop table t1, t2;
create table t1 (a text character set utf8, b text character set latin1);
insert t1 values (0x4F736E616272C3BC636B, 0x4BF66C6E);
select * from t1;
a	b
Osnabrck	Kln
test.t1: Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
select * from t1;
a	b
Osnabrck	Kln
drop table t1;
+12 −0
Original line number Diff line number Diff line
@@ -635,4 +635,16 @@ insert into t2 (a, b) values (NULL, NULL),(10, NULL),(NULL, "twenty"),(30, "thir
--exec $MYSQL_DUMP  --skip-comments --xml --no-create-info test
drop table t1, t2;

#
# BUG #12123
#
create table t1 (a text character set utf8, b text character set latin1);
insert t1 values (0x4F736E616272C3BC636B, 0x4BF66C6E);
select * from t1;
--exec $MYSQL_DUMP --tab=$MYSQL_TEST_DIR/var/tmp/ test
--exec $MYSQL test < $MYSQL_TEST_DIR/var/tmp/t1.sql
--exec $MYSQL_IMPORT test $MYSQL_TEST_DIR/var/tmp/t1.txt
select * from t1;

drop table t1;
# End of 4.1 tests