MySQL LOAD DATA INFILE数据太长导致列异常
本文关键字:致列 异常 数据 LOAD DATA INFILE MySQL | 更新日期: 2023-09-27 18:19:00
我使用MySQL LOAD DATA INFILE Data
命令批量插入数据到表。我是这样做的:
LOAD DATA INFILE 'MyFile.csv' INTO TABLE `dbname`.`tablename` FIELDS TERMINATED BY ''t' ENCLOSED BY '"' LINES TERMINATED BY ''r'n' ;
当我从我们的c#项目中运行它时,我得到一个char(50)列的Data too long for column xxx
异常,该列提供的数据小于50(但它是波斯语),但当我使用MySql客户端如SQLyog时,它工作正常。
我是这样运行这个命令的:
private static void RunCommand(string command,params object[] args)
{
if (args != null)
command = string.Format(command, args);
using (var conn = MySqlClientFactory.Instance.CreateConnection())
{
if (conn == null) return;
conn.ConnectionString =
"Server=localhost;Uid=root;Pwd=123456; AutoEnlist=false;Charset=utf8;";
conn.Open();
using (var comm = conn.CreateCommand())
{
comm.CommandText = command;
comm.ExecuteNonQuery();
}
}
}
我猜这可能是转换Unicode
字符的问题,但我不知道如何使其正确运行。
为LOAD DATA INFILE...
语句添加CHARACTER SET utf8
参数:
LOAD DATA INFILE 'MyFile.csv'
INTO TABLE `dbname`.`tablename`
CHARACTER SET utf8
FIELDS TERMINATED BY ''t' ENCLOSED BY '"'
LINES TERMINATED BY ''r'n';
如文档中所述,它指定文件中使用的字符集:
character_set_database系统指示的字符集变量用于解释文件中的信息。组名称并且character_set_client的设置不影响解释的输入。如果输入文件的内容使用的字符集为与默认值不同,通常最好指定通过使用character set子句来设置文件的字符集,即
如果未指定,则获取默认值,例如latin1
,并且每个utf-8
字节都被解释为字符。因为一些utf-8
编码字符有一个以上的字节,所以你得到了更长的字符串。