Почему MySQL все еще вставляется, даже если это не должно - PullRequest
1 голос
/ 10 апреля 2020

Это моя база данных (только для примера):

+----------------+---------------+------+-----+---------+---------------+
| Field          | Type          | Null | Key | Default | Extra         |
+----------------+---------------+------+-----+---------+---------------+
| id             | integer       | NO   |PK   | NONE    |AUTO_INCREMENT |
| name           | string        | NO   |     | NONE    |               |
| email          | string        | YES  |     | NULL    |               |
| phoneNumber    | string        | YES  |     | NULL    |               |
| password       | string        | NO   |     | NONE    |               |
| maxDistance    | integer       | NO   |     | NONE    |               |
| showMeOnApp    | integer       | NO   |     | NONE    |               |
| created_at     | datetime      | NO   |     | NONE    |               |
| updated_at     | datetime      | NO   |     | NONE    |               |
+----------------+---------------+------+-----+---------+---------------+

Итак, проблема в том, что когда я делаю вставку в phpMyAdmin без добавления какого-либо значения, например, в password или created_at , поля, которые должны иметь значение, он все равно вставляет строку, даже если я не установил значение. Почему это? Я думаю, что это должно дать мне ошибку, говоря что-то вроде: Password can't be null, maxDistance can't be null... Вы знаете? Нечто подобное, что я получаю сейчас, это:

1 row inserted
Warning: #1366 Incorrect integer value: '' for column `databasename`.`users`.`maxDistance` at row 1
Warning: #1366 Incorrect integer value: '' for column `databasename`.`users`.`showMeOnApp` at row 1
Warning: # 1265 Truncated data for column 'created_at' in row 1
Warning: # 1265 Truncated data for column 'updated_at' in row 1

Но вставьте в любом случае.

Так что это мой вопрос, почему он все еще вставляет строку, если я не удовлетворяю все условия?

1 Ответ

2 голосов
/ 10 апреля 2020

Вы, похоже, не понимаете, что означает атрибут Null для схемы столбца. Когда он установлен на TRUE, это означает, что вы можете вставить значение NULL для этого столбца; если вам не удастся указать значение для этого столбца, по умолчанию будет установлено значение NULL.

Если атрибут Null в схеме равен FALSE, это означает, что вы можете не установите этот столбец на NULL, и попытка сделать это, возможно, сгенерирует предупреждение, и, возможно, установит значение этого столбца на "" (пустая строка) в зависимости от того, какую версию MySQL вы используете и как это настроено. В этом случае, если вам не удастся указать значение для этого столбца, по умолчанию оно будет равно "" (пустая строка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...