Очередной баг в 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 - будьте осторожны. И лучше импортируйте каждый уровень в отдельную таблицу.