Вы можете попытаться выполнить итерацию строки, используя класс QXmlStreamReader, и извлечь весь текст (если ваша строка HTML гарантируется, что она хорошо сформирована XML).
Что-то вроде этого:
QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
if ( xml.readNext() == QXmlStreamReader::Characters ) {
textString += xml.text();
}
}
, но я не уверен, что его 100% действительное использование QXmlStreamReader API, так как я использовал его довольно давно и может что-то забыть.
https://dev.mysql.com/doc/refman/5.6/en/innodb-trou planning-datadict.html говорит:
Файл .frm должен иметь ту же схему таблицы, что и потерянная промежуточная таблица (она должна иметь те же столбцы и индексы), и должна быть помещена в каталог базы данных потерянной промежуточной таблицы.
blockquote>Если файл .frm должен иметь те же столбцы и индексы, то да, вы должны сопоставить правильный файл .frm с правильным файлом .ibd. Я не знаю, как генерируются эти временные имена файлов. Кажется, что нет никакой четкой корреляции, поэтому практически невозможно узнать, какая из них совпадает с другой.
Вы можете вывести исходную структуру таблицы из файла .frm, используя инструмент
mysqlfrm
в MySQL Utilities. Здесь есть хороший блог, показывающий, как это сделать: https://www.percona.com/blog/2014/01/02/recover-table-structure-frm-files-mysql-utilities/ [ 1114]Вы должны загрузить MySQL Utilities в ближайшее время, потому что Oracle, похоже, устарел в этих инструментах. Некоторые функции этих инструментов переопределяются как часть MySQL Shell, но я ожидаю, что любые функции для файлов .frm не будут поддерживаться, потому что MySQL 8.0 больше не использует файлы .frm.
Я только что попытался использовать
mysqlfrm
на своем Macbook, но я получаю эту ошибку:ERROR: Cannot find location of mysql_system_tables.sql.
Я предполагаю, что это потому, что MySQL установлен в / usr / local на моем Macbook. Возможно, это будет более успешным на сервере Linux, но у меня нет удобной установки Linux, на которой установлены MySQL Utilities.
1118 И это только половина истории. Вам все равно нужно знать структуру таблиц каждого файла .ibd, чтобы сопоставить его с правильным файлом .frm. Вы можете собрать информацию вместе из этих таблиц INFORMATION_SCHEMA:
- INNODB_SYS_TABLES
- INNODB_SYS_COLUMNS
- INNODB_SYS_INDEXES
Например, Вот простая таблица в моей тестовой схеме:
CREATE TABLE `A` ( `c1` int(11) NOT NULL DEFAULT '0', `c2` int(11) DEFAULT NULL, `c3` int(11) DEFAULT NULL, PRIMARY KEY (`c1`), KEY `c2` (`c2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Если я запрашиваю таблицы I_S:
mysql> select * from innodb_sys_tables where name = 'test/A'; +----------+--------+------+--------+-------+-------------+------------+---------------+ | TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | +----------+--------+------+--------+-------+-------------+------------+---------------+ | 2126 | test/a | 1 | 6 | 2106 | Antelope | Compact | 0 | +----------+--------+------+--------+-------+-------------+------------+---------------+ mysql> select * from innodb_sys_columns where table_id = 2126; +----------+------+-----+-------+--------+-----+ | TABLE_ID | NAME | POS | MTYPE | PRTYPE | LEN | +----------+------+-----+-------+--------+-----+ | 2126 | c1 | 0 | 6 | 1283 | 4 | | 2126 | c2 | 1 | 6 | 1027 | 4 | | 2126 | c3 | 2 | 6 | 1027 | 4 | +----------+------+-----+-------+--------+-----+ mysql> select * from innodb_sys_indexes where table_id = 2126; +----------+---------+----------+------+----------+---------+-------+ | INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE | +----------+---------+----------+------+----------+---------+-------+ | 3875 | PRIMARY | 2126 | 3 | 1 | 3 | 2106 | | 3876 | c2 | 2126 | 0 | 1 | 4 | 2106 | +----------+---------+----------+------+----------+---------+-------+