Код ERROR 1452 mysql в windows, но не в linux
У меня есть проект django, который создает таблицы после manage.py migrate. Я использую некоторые LOAD DATA LOCAL INFILE MySQL запросы для обоих. У меня есть 7 таблиц. Все первые 6 таблиц заполняются одинаково как в Linux, так и в Windows. За исключением последней таблицы, которая имеет некоторые внешние ключи в предыдущих.
Обе таблицы Windows и Linux находятся в InnoDB, и родительская таблица имеет точно такие же данные.
Информация о таблице в Windows
Клавиши таблиц разделов в Windows
INSERT INTO `seas_database`.`section_t`
(`eSession`,`eDays`,`dYear`,`nSectionNumber`,`nSectionCapacity`,`nEnrolled`,`bIsBlocked`,`tStartTime`,`tEndTime`,`cCoffCode_ID`,`cFaculty_ID`,`cRoom_ID`)
VALUES
("Spring","F",2009,1,250,43,0,"14:00","15:30","AAT101","T001","C10210-S");
Доказательство того, что AAT101 существует в Windows
Однако я получаю эту ошибку только в Windows. Не в Linux.
Error Code: 1452.
Cannot add or update a child row:
a foreign key constraint fails
(`seas_database`.`section_t`, CONSTRAINT `section_t_cCoffCode_ID_ade53504_fk_cooffered` FOREIGN KEY (`cCoffCode_ID`)
REFERENCES `coofferedcourse_t` (`cCoffCode_ID`))
<<< Версия MySQL:
mysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)
Версия MySQL для Windows:
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe Ver 8.0.27 for Win64 on x86_64 (MySQL Community Server - GPL)
Если это поможет, csv, для которого был запущен LOAD DATA INFILE, был изменен и создан Pandas из xlsx файла.
Решение оказалось действительно зависящим от платформы. Символ окончания строки в автоматически генерируемом csv-файле, из которого я загружал данные, различался в Windows и Linux. Так, в Linux я никогда не сталкивался с проблемой при использовании приведенного ниже кода,
-- Populating CoOfferedCourse_T
LOAD DATA LOCAL
INFILE "path/to/foo.csv"
INTO TABLE coofferedcourse_t
FIELDS TERMINATED BY "\t"
IGNORE 1 LINES
(@COFFER_COURSE_ID,@COFFERED_WITH)
SET cCoffCode_ID=@COFFERED_WITH,cCourse_ID=@COFFER_COURSE_ID;
В windows мне пришлось добавить
LINES TERMINATED BY '\r\n'
После чего состояния таблиц в обеих платформах стали идентичными