https://dev.mysql.com/doc/en/load-data.html
BIT values cannot be loaded using binary notation (for example, b’011010′).
$ cat test.txt
b'101010'
0b111000
-----
CREATE TABLE loadTest (b BIT(6));
LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE loadTest;
/*--------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1406 | Data too long for column 'b' at row 1 |
| Warning | 1406 | Data too long for column 'b' at row 2 |
+---------+------+--------------------------------------*/
-- Note the wrong values:
SELECT BIN(b) FROM loadTest;
/*-------+
| BIN(b) |
+--------+
| 111111 |
| 111111 |
+-------*/
TRUNCATE loadTest;
LOAD DATA LOCAL INFILE 'test.txt' INTO TABLE loadTest (@b)
SET b = CAST(CONV(TRIM('''' FROM SUBSTRING_INDEX(@b, 'b', -1)), 2, 10) AS UNSIGNED);
SELECT BIN(b) FROM loadTest;
/*-------+
| BIN(b) |
+--------+
| 101010 |
| 111000 |
+-------*/
Deconstruction:
SUBSTRING_INDEX(@b, 'b', -1)
removes the leading ‘b’ or ‘0b’.
TRIM('''' FROM ...)
removes the quotes if there are any.
CONV(..., 2, 10)
converts the string of 0s and 1s into a string of decimal digits.
CAST(... AS UNSIGNED)
turns the string of decimal digits into an integer.
MySQL automatically casts integers into bits when inserting into a BIT type.
