在 LOAD DATA LOCAL INFILE 期间将 'False'(string) 转换为 False(boolean)

Naw*_*ail 7 mysql

在 MySQL 中,无论如何都可以将“False”加载到布尔列中。

在具有布尔列且数据为“真”或“假”的表中加载数据时,它会发出以下警告:

"Incorrect integer value: 'False' for column 'c1' at row 1".
Run Code Online (Sandbox Code Playgroud)

表结构如下

Create Table: CREATE TABLE `n1` (
  `c1` boolean ,
  `c2` int
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

我正在使用加载数据语句从文件“file1”加载,该文件以逗号分隔并用双引号括起来。以下是数据样本

"False","1" 
"True","2"
Run Code Online (Sandbox Code Playgroud)

加载数据本地infile语句如下

load data local infile 'file1' 
into table n1 
  FIELDS TERMINATED BY ',' 
  enclosed by '\"' LINES 
  TERMINATED BY '\r\n';
Run Code Online (Sandbox Code Playgroud)

Rol*_*DBA 7

使用用户变量转换第一个值以加载 True/False 值。

然后,将其与值 'True' 进行比较

建议的解决方案

LOAD DATA LOCAL INFILE 'C:/bin/input.txt' INTO TABLE n1
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n' (@var1,c2)
SET c1 = (@var1 = 'True');
Run Code Online (Sandbox Code Playgroud)

样本数据

C:\bin>dir
 Volume in drive C is TI10665200H
 Volume Serial Number is A273-2EFF

 Directory of C:\bin

10/21/2014  10:01 AM    <DIR>          .
10/21/2014  10:01 AM    <DIR>          ..
10/21/2014  10:01 AM                23 input.txt
               1 File(s)             23 bytes
               2 Dir(s)  685,548,244,992 bytes free

C:\bin>type input.txt
"False","1"
"True","2"
C:\bin>
Run Code Online (Sandbox Code Playgroud)

建议解决方案代码

USE test
DROP TABLE IF EXISTS n1;
CREATE TABLE `n1` (
  `c1` boolean ,
  `c2` int
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOAD DATA LOCAL INFILE 'C:/bin/input.txt' INTO TABLE n1
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n' (@var1,c2)
SET c1 = (@var1 = 'True');
SELECT * FROM n1;
Run Code Online (Sandbox Code Playgroud)

已执行的拟议解决方案代码

mysql> USE test
Database changed
mysql> DROP TABLE IF EXISTS n1;
Query OK, 0 rows affected (0.14 sec)

mysql> CREATE TABLE `n1` (
    ->   `c1` boolean ,
    ->   `c2` int
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.38 sec)

mysql> LOAD DATA LOCAL INFILE 'C:/bin/input.txt' INTO TABLE n1
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
    -> LINES TERMINATED BY '\r\n' (@var1,c2)
    -> SET c1 = (@var1 = 'True');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM n1;
+------+------+
| c1   | c2   |
+------+------+
|    0 |    1 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

试一试 !!!