I have a table
`CREATE TABLE IF NOT EXISTS `PROGETTO`.`ALBERGO` (
`ID` INT(11) NOT NULL COMMENT 'identificativo dell' albergo' ,
`nome` VARCHAR(45) NULL COMMENT 'Il nome dell'albergo' ,
`viale` VARCHAR(45) NULL COMMENT 'Il viale in cui si trova ' ,
`num_civico` VARCHAR(5) NULL COMMENT 'Il numero civico che gli appartiene' ,
`data_apertura` DATE NULL COMMENT 'Data di inizio apertura (inizio stagione)' ,
`data_chiusura` DATE NULL COMMENT 'Data di chiusura (fine stagione)' ,
`orario_apertura` TIME NULL COMMENT 'Orario di apertura' ,
`orario_chiusura` TIME NULL COMMENT 'Orario di chiusura' ,
`posti_liberi` INT(11) NULL COMMENT 'Disponiblità posti liberi ' ,
`costo_intero` FLOAT NULL COMMENT 'Costo del prezzo intero' ,
`costo_ridotto` FLOAT NULL COMMENT 'Costo del prezzo ridotto' ,
`stelle` INT(11) NULL COMMENT 'Classificazione in base al criterio delle stelle' ,
`telefono` VARCHAR(15) NULL COMMENT 'Recapito telefonico' ,
`mail` VARCHAR(100) NULL COMMENT 'Recapito e-mail' ,
`web` VARCHAR(100) NULL COMMENT 'Sito Web relativo all'ente' ,
'Nome-paese` VARCHAR(45) NOT NULL COMMENT 'Identificativo del paese in cui si trova l'albergo' ,
`Comune` CHAR(2) NOT NULL COMMENT 'Identificativo del comune in cui si trova l'albergo' ,
PRIMARY KEY (`ID`) ,
INDEX `Nome-paese` (`Nome-paese` ASC) ,
INDEX `Comune` (`Comune` ASC) ,
CONSTRAINT `Nome-paese`
FOREIGN KEY (`Nome-paese` )
REFERENCES `PROGETTO`.`PAESE` (`Nome-paese` )
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT `Comune`
FOREIGN KEY (`Comune` )
REFERENCES `PROGETTO`.`PAESE` (`Comune` )
ON DELETE NO ACTION
ON UPDATE CASCADE)
ENGINE = InnoDB
When i try to run this query:
INSERT INTO `PROGETTO`.`ALBERGO`(`ID`, `nome`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `posti_liberi`, `costo_intero`, `costo_ridotto`, `stelle`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`)
VALUES(0, 'Hotel Centrale', 'Via Passo Rolle', '74', '01-05-2012', '31-09-2012', '06:30', '24:00', 80, 50, 25, 3, '43968083', 'info@hcentrale.it', 'http://www.hcentrale.it/', 'Trento', 'TN')
*Error Code: 1292. Incorrect date value: ’01-05-2012′ for column ‘data_apertura’ at row 1*
What have i to change? (i tried to change format’s date from gg/mm/yyyy to gg-mm-yyyy, but nothing changed)
The MySQL Incorrect datetime value
error (which is also known as ERROR 1292
) is triggered when you perform an INSERT
statement that contains one or more DATETIME
values with the wrong format.
MySQL only accepts DATETIME
values in the format of YYYY-MM-DD hh:mm:ss
for string
type or YYYYMMDDhhmmss
for integer
type.
To show you an example, suppose you have a table with DATE
and DATETIME
columns as shown below:
+-------------+--------------+------+
| Field | Type | Null |
+-------------+--------------+------+
| id | int unsigned | NO |
| join_date | date | YES |
| last_update | datetime | YES |
+-------------+--------------+------+
Now suppose you want to INSERT
a new value to the last_update
column with the following statement:
INSERT INTO example (last_update) values("10-17-2021 15:40:10");
MySQL will throw an error as shown below:
ERROR 1292 (22007): Incorrect datetime value: '10-17-2021 15:40:10'
for column 'last_update' at row 1
This is because the DATETIME
value in the statement above uses the DD-MM-YYYY HH:MM:SS
format, which is unacceptable by MySQL.
The obvious way to fix the error is to change the formatting of your value into the format that MySQL can accept.
But rather than editing the value manually, you can use the STR_TO_DATE()
function to help you convert the string value into date value.
Here’s an example of STR_TO_DATE()
function in action:
SELECT STR_TO_DATE("10-17-2021 15:40:10", "%m-%d-%Y %H:%i:%s");
-- 2021-10-17 15:40:10
The STR_TO_DATE()
function requires two arguments to run:
- The datetime string that you want to convert
- The format of the datetime string you pass to the function
Because there are many valid datetime formats in the world, it’s impossible for MySQL to guess what format the string
value you passed to the function.
The STR_TO_DATE()
function uses the same specifiers as the DATE_FORMAT()
function that you can see here.
With the STR_TO_DATE()
function, the previous INSERT
statement won’t cause an error:
INSERT INTO example (last_update)
values(STR_TO_DATE("10-17-2021 15:40:10", "%m-%d-%Y %H:%i:%s"));
And that’s how you can fix the error Incorrect datetime value
in MySQL.
Keep in mind that the error can also be triggered when you try to insert a DATE
value to a DATE
type column as follows:
mysql> INSERT INTO example (join_date) values("10-17-2021");
ERROR 1292 (22007): Incorrect date value: '10-17-2021'
for column 'join_date' at row 1
The error will say Incorrect date value
instead of Incorrect datetime value
, but they are both the same error.
You can use STR_TO_DATE()
to format your date value as shown below:
INSERT INTO example (join_date)
values(STR_TO_DATE("10-17-2021", "%m-%d-%Y"));
Just remember that you need to pass the right format to the STR_TO_DATE()
function, or MySQL won’t be able to process your value.
In another example, if you’re using the forward slash /
as the separator for your date value, then you need to use the same separator for the format parameter:
INSERT INTO example (join_date)
values(STR_TO_DATE("10/17/2021", "%m/%d/%Y"));
When you have many values that you want to insert to your table, using STR_TO_DATE
function will save you from having to edit your values format manually.
But if you only want to insert a single value, then formatting your value manually might be faster.
Now you’ve learned how to fix the invalid datetime value error in MySQL database server. Great job! 👍
MySQL error 1292 occurs if the syntax for the date is incorrectly entered.
Here at Bobcares, we have seen several causes for this error while troubleshooting MySQL issues as part of our Server Management Services for web hosts and online service providers.
Today we’ll take a look at the cause for this error and how to fix it.
Why does MySQL Error 1292 occur
Before we get into the solution part, let us first see what causes this error to occur.
This error normally occurs when the date is entered in an incorrect format. The date value like 0000-00-00 00:00:00 is not allowed with MySQL 5.7 version.
Also, this error can occur when trying to compare a number and a string in a WHERE or ON clause.
For instance, the error appears as below.
How we fix MySQL Error 1292
This error is of different types and can occur due to many reasons and also the solution will differ according to the error. Here are the different errors and the solutions that our Engineers provide to our customers.
1. If a field type is a DATE, then we make sure that the date is entered in the format “yyyy-mm-dd”.
2. Error Code: 1292 – Incorrect date value
Many of our customers use MySQL 5.7. But in this version date value like 0000-00-00 00:00:00 is not allowed. Hence, the above error occurs. In case, if our customers want to allow it, then we update their my.cnf like:
sudo nano /etc/mysql/my.cnf
In this file, we find
[mysqld]
Then after that, we add the below line.
sql_mode=”NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
After adding the above line, we restart the MySQL service. For that, we run the below command.
sudo service mysql restart
3. #1292 – Truncated incorrect DOUBLE value
Usually, this error message appears when customers try to compare a number and a string in a WHERE or ON clause.
So we make sure that they have similar declarations or convert the number to a string. Also, if we turn off strict mode, the error turns into a warning.
[Need any further assistance in fixing MySQL errors? – We’re available 24*7]
Conclusion
In short, this error can arise with different messages and has its own way to fix it. Today, we saw the resolution to this MySQL error.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
GET STARTED
var google_conversion_label = «owonCMyG5nEQ0aD71QM»;
При работе с базами данных могут встречаться ошибки. Ниже перечислены частые ошибки и меры по их диагностике и устранению.
- Недоступность базы данных
- Повреждены таблицы БД (Table is marked as crashed)
- Ошибка 2006: MySQL server has gone away
- Ошибка 1040: Too many connections
- Ошибка 1292: Incorrect date value
Недоступность базы данных
Необходимо подключиться к серверу по SSH и выполнить следующие проверки:
1. Проверить, запущена ли служба MySQL:
service mysql status
Пример вывода для запущенной службы:
Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:
service mysql start
После этого надо проверить работу сайта и сделать следующую проверку, если ошибка сохраняется.
2. Проверить состояние дискового пространства.
Просмотреть общий и занятый объем на диске командой:
df -h
Доступное пространство должно быть на основном разделе. Если свободное пространство закончилось, необходимо освободить место или перейти на тариф выше. Для работы с дисковым пространством можно использовать утилиты ncdu или du.
Если на диске достаточно свободного места, но ошибка сохраняется, надо проверить состояние inodes.
Если не удается решить ошибку самостоятельно, то нужно обратиться в техническую поддержку.
Повреждены таблицы БД (Table is marked as crashed)
При возникновении ошибок вида «Warning: Table … is marked as crashed» необходимо выполнить восстановление таблиц.
Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого необходимо:
- перейти в интерфейс PMA,
- выбрать нужную базу данных в меню слева,
- отметить в списке таблицы, которые нужно восстановить — то есть таблицы, имена которых фигурируют в ошибках,
- в самом низу страницы нажать на выпадающее меню «С отмеченными» и выбрать вариант «Восстановить».
Без phpMyAdmin можно выполнить необходимые действия при подключении по SSH. Для восстановления одной таблицы нужно выполнить команду:
mysqlcheck -r имя_базы имя_таблицы -uroot -p
Для восстановления всех таблиц в базе используется команда:
mysqlcheck -r имя_базы -uroot -p
Также можно выполнить проверку всех таблиц в базе с помощью команды:
mysqlcheck -r -A -uroot -p
Ошибка 2006: MySQL server has gone away
Ошибка MySQL server has gone away означает, что сервер закрыл соединение. Это происходит, как правило, в двух случаях: превышение таймаута ожидания или получение сервером слишком большого пакета.
В обоих случаях для устранения ошибки потребуется внести правки в конфигурационный файл MySQL. Это делается при подключении к серверу по SSH или с помощью веб-консоли в панели управления.
Конфигурационный файл может располагаться по различным путям, например:
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
Чтобы определить, в какой файл необходимо вносить изменения, можно использовать команду вида:
grep -Rl ‘имя_параметра’ /etc/*
Например:
grep -Rl ‘wait_timeout’ /etc/*
или:
grep -Rl ‘max_allowed_packet’ /etc/*
С ее помощью можно выяснить, в каких файлах прописан нужный параметр, и изменить в них его значение.
Таймаут
Чтобы увеличить таймаут ожидания, необходимо скорректировать значение параметра wait_timeout
Нужно открыть конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
nano /etc/mysql/my.cnf
Далее нужно изменить значение параметра wait_timeout на более высокое. Значение указывается в секундах: чтобы увеличить время ожидания до 10 минут, необходимо указать значение 600:
wait_timeout = 600
После перезапустить службу MySQL:
service mysql restart
Размер пакетов
Скорректировать максимально допустимый размер пакетов можно увеличением параметра max_allowed_packet.
Нужно открыть конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
nano /etc/mysql/my.cnf
Дале нужно изменить значение параметра max_allowed_packet на более высокое (значение указывается в мегабайтах):
max_allowed_packet = 64M
После перезапустить службу MySQL:
service mysql restart
Ошибка 1040: Too many connections
Ошибка «Too many connections» означает, что исчерпан лимит подключений к базе данных. Ошибка связана с медленными запросами, которые выполняются слишком долго (в этом случае требуется оптимизация кода) либо в числе одновременных подключений. В этом случае можно попробовать решить проблему увеличением лимита подключений (параметр max_connections) в конфигурационном файле MySQL.
В пункте выше было описано, как определить расположение файла my.cnf.
Следует открыть конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
nano /etc/mysql/my.cnf
И заменить значение параметра на более высокое, например:
max_connections = 200
После перезапустить службу MySQL:
service mysql restart
Ошибка 1292: Incorrect date value
При попытке добавить данные в таблицу MySQL без указания даты может выдаваться ошибка:
ERROR 1292 (22007): Incorrect date value: ‘0000-00-00’ for column ‘columnname’ at row 1
Из-за этой ошибки может нарушаться работа импорта в 1С.
Для исправления ошибки необходимо:
1.Открыть файл /etc/mysql/my.cnf:
nano /etc/mysql/my.cnf
2. В строке, начинающейся с sql-mode=, удалить следующие значения:
NO_ZERO_IN_DATE
NO_ZERO_DATE
STRICT_ALL_TABLES
3. Выполнить перезагрузку mysql-сервера:
sudo service mysql restart
Примечание:
Если строка вида sql-mode= отсутствует, необходимо:
1. В файл /etc/mysql/my.cnf после параметра [mysqld] добавить строку:
sql-mode=»ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION»
2. Выполнить перезагрузку mysql-сервера:
sudo service mysql restart
psiklop,
Ты передаёшь литерал — в любом случае текстовый.
При записи в поле типа TIMESTAMP этот литерал интерпретируется как литерал в локальной зоне времени, и выполняется его преобразование в GMT, после чего пишется в таблицу. При получении выполняется обратная операция. Если в промежутке была изменена зона сервера, то возвращаемый литерал будет отличаться от сохранённого.
При записи в поле типа DATETIME литерал интерпретируется как уже GMT, и значение сохраняется без каких-либо изменений. И соответственно при обратном получении тоже никаких преобразований нет, и литерал выходит строго тот, который сохраняли.