我需要将数据从MSSQL(Microsoft SQL Server)传输到MySQL,对我来说最好的选择是编写一个python脚本,将数据从MSSQL导出为csv,然后将此csv导入mysql。到目前为止,这个过程对我来说效果很好(我不是在寻找另一种方法)。
从MSSQL到MySQL的数据类型转换如下:
MSSQL_MySQL_MAP = {
'nvarchar' : 'varchar',
'varchar' : 'varchar',
'bit' : 'boolean',
'smallint' : 'smallint',
'int' : 'int',
'datetime' : 'datetime',
'timestamp' : 'datetime',
'ntext' : 'longtext',
'real' : 'double',
'image' : 'BLOB',
'float' : 'float',
'money' : 'decimal',
}
使用以下命令将导出的csv导入MySQL ..
"""LOAD DATA INFILE '%s/%s' REPLACE INTO TABLE %s FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'"""
我的情况是有一个" bit" MSSQL中的数据类型,导出的CSV包含True of False字符串,如下所示:
22294,501,q4h,12 ,False,False,None,False,None,None,None,0,None,None
让MySQL理解True或False字符串是布尔值1还是0并正确导入它的最佳方法是什么?目前,我收到以下警告:
Warning: Incorrect integer value: 'False' for column 'system_code' at row 7
有没有办法传递一些参数以及可以实现此目的的负载信息数据?
答案 0 :(得分:4)
默认情况下,如果
LOAD DATA INFILE
语句末尾没有提供列列表,则输入行应包含每个表列的字段。如果只想加载某些表的列,请指定列列表:LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
如果输入文件中字段的顺序与表中列的顺序不同,则还必须指定列列表。否则,MySQL无法告诉如何将输入字段与表列匹配。
列列表可以包含列名称或用户变量。使用用户变量,
SET
子句使您可以在将结果分配给列之前对其值执行转换。
SET
子句中的用户变量可以通过多种方式使用。以下示例直接使用第一个输入列作为t1.column1
的值,并将第二个输入列分配给在用作t1.column2
的值之前经过除法运算的用户变量:< / p>LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @var1) SET column2 = @var1/100;
在您的情况下,您可以执行SET boolean_column := @dummy_variable = 'True'
。