Насколько я знаю, NSData
- это просто объект данных, который обертывает массив байтов:
... поэтому одним из способов, о котором я могу думать, если вы хотите открыть его тип MIME, является проверка самих байтов и затем предположим, что там есть. Вот пример этого здесь: Поиск типа изображения из NSData или UIImage
Я также нашел это: Определить тип MIME NSData, загруженный из файла ; который относится к некоторой внутренней базе данных (я думаю), которая может использоваться для поиска типа MIME.
Но, как говорит Том Харрингтон в своем ответе, это может стать сложным в зависимости от того, с чем вы имеете дело.
Изменить ...
Конечно, это второе решение зависит от расширения файла, которого у вас явно нет, но я уверен, что вы это уже заметили.
Воспроизведение ошибки:
mysql> create table dealers (dealer_id int primary key);
mysql> create table models (model_id int primary key);
mysql> create table my_table (dealer_id int, model_id int, model_year int, allocation_week int, primary key (dealer_id, model_id, model_year, allocation_week));
mysql> alter table my_table add foreign key (dealer_id) references dealers(dealer_id);
mysql> alter table my_table add foreign key (model_id) references models (model_id);
Теперь таблица выглядит следующим образом. Он неявно создал индекс для model_id
, но не должен был делать это для dealer_id
, потому что он был в состоянии «заимствовать» использование индекса PK для самого левого столбца.
mysql> show create table my_table\G
CREATE TABLE `my_table` (
`dealer_id` int(11) NOT NULL DEFAULT '0',
`model_id` int(11) NOT NULL DEFAULT '0',
`model_year` int(11) NOT NULL DEFAULT '0',
`allocation_week` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`dealer_id`,`model_id`,`model_year`,`allocation_week`),
KEY `model_id` (`model_id`),
CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`dealer_id`) REFERENCES `dealers` (`dealer_id`),
CONSTRAINT `my_table_ibfk_2` FOREIGN KEY (`model_id`) REFERENCES `models` (`model_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Поэтому, когда я уронил PK, он не может этого сделать, потому что это сломало бы FK:
mysql> alter table my_table drop primary key;
ERROR 1025 (HY000): Error on rename of './test/#sql-337_18' to './test/my_table' (errno: 150 - Foreign key constraint is incorrectly formed)
Решение: добавьте вторичный индекс для dealer_id
, тогда вы можете бросьте ПК.
Вы можете сделать все эти изменения в одном ALTER:
mysql> alter table my_table
add key (dealer_id),
drop primary key,
add column id int auto_increment primary key first;
Результат:
mysql> show create table my_table\G
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dealer_id` int(11) NOT NULL DEFAULT '0',
`model_id` int(11) NOT NULL DEFAULT '0',
`model_year` int(11) NOT NULL DEFAULT '0',
`allocation_week` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `model_id` (`model_id`),
KEY `dealer_id` (`dealer_id`),
CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`dealer_id`) REFERENCES `dealers` (`dealer_id`),
CONSTRAINT `my_table_ibfk_2` FOREIGN KEY (`model_id`) REFERENCES `models` (`model_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4