| Bug #70404 | Bit Value Not being Dumped Properly by mysqldump | ||
|---|---|---|---|
| Submitted: | 23 Sep 2013 22:22 | Modified: | 24 Sep 2013 7:45 |
| Reporter: | Jervin R | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: mysqldump Command-line Client | Severity: | S3 (Non-critical) |
| Version: | OS: | Any | |
| Assigned to: | CPU Architecture: | Any | |
[24 Sep 2013 6:51]
Valeriy Kravchuk
Seems repeatable with 5.6.14 (Oracle's) also on Linux:
[openxs@chief 5.6]$ bin/mysql --no-defaults -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.14 MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create table t ( id int unsigned not null auto_increment primary key, x bit(1) not null) engine = innodb;
Query OK, 0 rows affected (0.39 sec)
mysql> set session sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t (x) values (0b0), (0b1), (1), ('1'), ('\1');
Query OK, 5 rows affected, 2 warnings (0.04 sec)
Records: 5 Duplicates: 0 Warnings: 2
mysql> select id, hex(x) from t;
+----+--------+
| id | hex(x) |
+----+--------+
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
+----+--------+
5 rows in set (0.02 sec)
mysql> exit
Bye
[openxs@chief 5.6]$ bin/mysqldump --no-defaults -uroot test t
-- MySQL dump 10.13 Distrib 5.6.14, for Linux (x86_64)
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 5.6.14
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `t`
--
DROP TABLE IF EXISTS `t`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`x` bit(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t`
--
LOCK TABLES `t` WRITE;
/*!40000 ALTER TABLE `t` DISABLE KEYS */;
INSERT INTO `t` VALUES (1,'\0'),(2,''),(3,''),(4,''),(5,'');
/*!40000 ALTER TABLE `t` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2013-09-24 9:48:27
On Windows (5.5.32) I see different output though:
...
--
-- Dumping data for table `t`
--
LOCK TABLES `t` WRITE;
/*!40000 ALTER TABLE `t` DISABLE KEYS */;
INSERT INTO `t` VALUES (6,'\0'),(7,'☺'),(8,'☺'),(9,'☺'),(10,'☺');
/*!40000 ALTER TABLE `t` ENABLE KEYS */;
UNLOCK TABLES;
...
(Do not mind id values, note that x column values are dumped as characters 0x01)
[24 Sep 2013 7:45]
MySQL Verification Team
Hello Jervin, Thank you for the bug report. Verified as described. Workaround - You may want to use --hex-blob with mysqldump while taking dump which would dump binary columns using hexadecimal notation. i.e INSERT INTO `t` VALUES (1,0x00),(2,0x01),(3,0x01),(4,0x01),(5,0x01); Also see - http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_hex-blob Thanks, Umesh
[18 Dec 2015 9:33]
MySQL Verification Team
http://bugs.mysql.com/bug.php?id=79699 marked as duplicate of this one (please check patch contribution attached to this bug report).

Description: When doing mysqldump dumps data with BIT column of value > 0, the data ends up as empty instead of being escaped or translated properly. How to repeat: [revin@forge rsandbox_5_5_320]$ ./m test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 96 Server version: 5.5.32-rel31.0-log Percona Server with XtraDB (GPL), Release rel31.0, Revision 549 Copyright (c) 2009-2013 Percona Ireland Ltd. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. master [localhost] {msandbox} (test) > create table t ( id int unsigned not null auto_increment primary key, x bit(1) not null) engine = innodb; Query OK, 0 rows affected (0.00 sec) master [localhost] {msandbox} (test) > insert into t (x) values (0b0), (0b1), (1), ('1'), ('\1'); Query OK, 5 rows affected, 2 warnings (0.00 sec) Records: 5 Duplicates: 0 Warnings: 2 master [localhost] {msandbox} (test) > show warnings; +---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1264 | Out of range value for column 'x' at row 4 | | Warning | 1264 | Out of range value for column 'x' at row 5 | +---------+------+--------------------------------------------+ 2 rows in set (0.00 sec) master [localhost] {msandbox} (test) > \q Bye [revin@forge rsandbox_5_5_320]$ ./master/my sqldump --databases test --tables t -- MySQL dump 10.13 Distrib 5.5.32, for Linux (x86_64) -- -- Host: localhost Database: test -- ------------------------------------------------------ -- Server version 5.5.32-rel31.0-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `t` -- DROP TABLE IF EXISTS `t`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `t` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `x` bit(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `t` -- LOCK TABLES `t` WRITE; /*!40000 ALTER TABLE `t` DISABLE KEYS */; INSERT INTO `t` VALUES (1,'\0'),(2,''),(3,''),(4,''),(5,''); /*!40000 ALTER TABLE `t` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2013-09-23 18:18:33