Является ли автоматическое преобразование строки в целое в SQL? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть оператор SQL для вставки записи в таблицу.Таблица определяется как:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| title       | varchar(255) | NO   |     | NULL    |                |
| description | text         | NO   |     | NULL    |                |
| filename    | varchar(255) | NO   |     | NULL    |                |
| type        | varchar(255) | NO   |     | NULL    |                |
| size        | int(11)      | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

Оператор SQL:

INSERT INTO photos 
  (title, description, filename, type, size) 
VALUES 
  ('Title D', 'Description D', 'Filename_D', 'BMP', '2000');

Меня всегда учили, что если вы не сопоставите тип столбца с типом данных, которые вы пыталисьпри вставке или обновлении SQL выдает ошибку.

К моему удивлению, оператор SQL работал в MySQL и MS Access, хотя столбец «size» определен как целое число, а данные о размере в операторе SQL заключены вкавычки, делающие это строкой ('2000').

Это функция MySQL и MS Access или SQL работает во всех базах данных, совместимых с SQL?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Спасибо, Гордон Линофф, за ответ.

Эрик Брандт, я открою новый вопрос по этому вопросу.Мне также интересно увидеть ответ.

0 голосов
/ 28 декабря 2018

Преобразование строк в числа происходит автоматически в большинстве баз данных.Итак, вы можете выразить свой запрос следующим образом:

INSERT INTO photos (title, description, filename, type, size) 
    VALUES ('Title D', 'Description D', 'Filename_D', 'BMP', '2000');

Это плохая идея, потому что неявное преобразование может генерировать ошибки преобразования - и вы не знаете, откуда они берутся.Я настоятельно рекомендую использовать правильные типы или явное преобразование:

INSERT INTO photos (title, description, filename, type, size) 
    VALUES ('Title D', 'Description D', 'Filename_D', 'BMP', 2000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...