欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql excel導入字段自動被截取

林玟書2年前14瀏覽0評論

最近在使用mysql進行excel導入的時候發現,有些字段會自動被截取,導致導入的數據與原始數據不一致。經過調查,發現是mysql默認對某些字段進行了截取。

具體表現為:

-- 創建測試表
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`content` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- excel數據
id  name        content
1   test        aaaaaaaaaaaaaaaaaaa
2   test2       bbbbbbbbbbbbbbbbbbb
-- 導入命令
LOAD DATA LOCAL INFILE '/tmp/test.csv' INTO TABLE test CHARACTER SET utf8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
-- 導入后的結果
SELECT * FROM test;
+----+------+----------------+
| id | name | content        |
+----+------+----------------+
|  1 | test | aaaaaaaaaa     |
|  2 | test2| bbbbbbbbbbb    |
+----+------+----------------+

在這個例子中,content字段被默認截取為10個字符,導致實際數據被截取了。這就需要我們在導入數據的時候注意一些細節。

可以通過以下方式解決:

-- 關閉截取
SET @@sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
-- 在導入前設置需要導入的表字段長度
ALTER TABLE test MODIFY content varchar(1000) DEFAULT NULL;
-- 導入命令
LOAD DATA LOCAL INFILE '/tmp/test.csv' INTO TABLE test CHARACTER SET utf8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
-- 恢復sql_mode
SET @@sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

通過這種方式,就可以關閉字段截取,同時在導入前設置好表字段長度,避免數據被截取。