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.