Очередной баг в MySQL.
Нашёл ещё один баг в MySQL. Поскольку Оракл все российские регистрации позакрывал - напишу хоть сюда, что ли...
Баг найден в запросе LOAD XML INFILE. Суть бага - если выполняется загрузка многоуровневого (nested) XML, то после обработки атрибутов нижнего уровня расположенные ниже по тексту атрибуты верхнего уровня не обрабатываются.
Например, имеется такой XML:
<data> <item col1="1"> <col2>2</col2> <nested col3="3">x</nested> <col4>4</col4> </item> <item col1="11"> <col2>22</col2> <col4>44</col4> <nested col3="33">xx</nested> </item> </data>
Выполняем его импорт в таблицу
CREATE TABLE data ( col1 INT, col2 INT, col3 INT, col4 INT, nested VARCHAR(4) );
запросом
LOAD XML INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/test.xml' INTO TABLE data ROWS IDENTIFIED BY '<nested>';
и видим, что для первой записи, где атрибут col4 расположен после вложенного атрибута nested, импорт col4 не выполняется. А во второй записи всё нормально.
mysql> SELECT * FROM data; +------+------+------+------+--------+ | col1 | col2 | col3 | col4 | nested | +------+------+------+------+--------+ | 1 | 2 | 3 | NULL | x | | 11 | 22 | 33 | 44 | xx | +------+------+------+------+--------+ 2 rows in set (0.00 sec)
В общем, если работаете с импортом XML - будьте осторожны. И лучше импортируйте каждый уровень в отдельную таблицу.