Ошибка mysql query error alter table

Помогите люди добрые ) понять суть того, как решить такую проблему в БД Битрикса!

Ошибка! Mysql Query Error: ALTER TABLE `b_socialservices_user` MODIFY `ID` int(11) NOT NULL auto_increment [Incorrect table definition; there can be only one auto column and it must be defined as a key]


  • Вопрос задан

    более двух лет назад

  • 331 просмотр

there can be only one auto column and it must be defined as a key — что конкретно не понятно в этой фразе?

Пригласить эксперта

Только одна колонка может быть с атрибутом auto_increment и она должна быть объявлена ключом (index or primary key)


  • Показать ещё
    Загружается…

09 июн. 2023, в 23:05

80000 руб./за проект

09 июн. 2023, в 22:45

1000 руб./за проект

09 июн. 2023, в 22:39

1000 руб./в час

Минуточку внимания

При переносе очередного сайта и разворачивание его на VDS-ке, у меня появилась ошибка:

MySQL Query Error: [[1366] Incorrect string value: ‘xB1NxC30x10xFD…’ for column ‘COOKIES’ at row 1]

Она была связана с тем, что не получалось сохраненить в БД куки из-за того что кодировка из скрипта не совпадала с кодировкой в БД.

Что бы это исправить, необходимо сменить кодировку в БД и определить эту кодировку в скриптах битрикса для подключения с базой данных. Т.к. ошибка может возникать из-за того, что пытается записать в БД символы, которые состоят не из 3 байтов, как в UTF-8, а из 4-х, то для хранения поля необходимо использовать utf8mb4. Поменять кодировку можно с помощью скрипта php:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?php

$dbName = ‘YOUR_DB_NAME’;

$user = ‘YOUR_USER_NAME’;

$password = ‘YOUR_PASSWORD’;

$dsn = ‘mysql:dbname=’.$dbName.‘;host=localhost’;

$time_n=time();

try {

    $dbh = new PDO($dsn, $user, $password);

} catch (PDOException $e) {

    exit(‘Подключение не удалось: ‘ . $e->getMessage());

}

$sql = «SELECT distinct CONCAT( ‘alter table ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘ CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;’ ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ‘$dbName’;»;

$arErrors = [];

$cnt = 0;

foreach ($dbh->query($sql) as $row) {

    try {

        $dbh->exec($row[0]);

    } catch (PDOException $e) {

        $arErrors[] = ‘Ошибка: ‘ . $e->getMessage();

    }

    $cnt++;

}

$time_k=time();

echo ‘Затронуто таблиц: ‘ . $cnt . ‘ Из них с ошибками: ‘ . count($arErrors) . ‘<br>’;

echo ‘Время выполнения: ‘ . strftime(‘%M:%S’,$time_k$time_n) . ‘<br>’;

if (count($arErrors) > 0) {

    echo ‘Список ошибок: <br>’;

    echo ‘<pre>’;

    print_r($arErrors);

    echo ‘</pre>’;

}

Результат выполнения скрипта:

Затем в конфигах битрикса прописать:
— в файле bitrix/php_interface/after_connect_d7.php:

$connection = BitrixMainApplication::getConnection();

$connection->queryExecute(«SET NAMES ‘utf8′»);

$connection->queryExecute(‘SET collation_connection = «utf8mb4_unicode_ci»‘);

— в файле bitrix/php_interface/after_connect.php:

$DB->Query(«SET NAMES ‘utf8′»);

$DB->Query(‘SET collation_connection = «utf8mb4_unicode_ci»‘);

После, если система заработает, следеут сделать проверку системы:

Bitrix проверка системы
Если будут ошибки, то исправить их следуя подсказкам битрикса.

Если же ошибка не исправилась, значит необходимо поиграться с вариантами кодировки. В моем случае эти действия помогли, но не с первого раза. По итогу оставил кодировку utf8 и utf8_unicode_ci, и она чудо образом стала работать. Почему до этого выпадала ошибка, для меня осталось загадкой 🙂

When you execute a MySQL statement, you may sometimes encounter ERROR 1054 as shown below:

mysql> SELECT user_name FROM users;
ERROR 1054 (42S22): Unknown column 'user_name' in 'field list'

The ERROR 1054 in MySQL occurs because MySQL can’t find the column or field you specified in your statement.

This error can happen when you execute any valid MySQL statements like a SELECT, INSERT, UPDATE, or ALTER TABLE statement.

This tutorial will help you fix the error by adjusting your SQL statements.

Let’s start with the SELECT statement.

Fix ERROR 1054 on a SELECT statement

To fix the error in your SELECT statement, you need to make sure that the column(s) you specified in your SQL statement actually exists in your database table.

Because the error above says that user_name column is unknown, let’s check the users table and see if the column exists or not.

To help you check the table in question, you can use the DESCRIBE or EXPLAIN statement to show your table information.

The example below shows the output of EXPLAIN statement for the users table:

mysql> EXPLAIN users;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| username     | varchar(25) | NO   |     |         |       |
| display_name | varchar(50) | NO   |     |         |       |
| age          | int         | YES  |     | NULL    |       |
| comments     | text        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+

From the result above, you can see that the users table has no user_name field (column)

Instead, it has the username column without the underscore.

Knowing this, I can adjust my previous SQL query to fix the error:

SELECT username FROM users;

That should fix the error and your SQL query should show the result set.

Fix ERROR 1054 on an INSERT statement

When you specify column names in an INSERT statement, then the error can be triggered on an INSERT statement because of a wrong column name, just like in the SELECT statement.

First, you need to check that you have the right column names in your statement.

Once you are sure, the next step is to look at the VALUES() you specified in the statement.

For example, when I ran the following statement, I triggered the 1054 error:

mysql> INSERT INTO users(username, display_name) 
    ->   VALUES ("jackolantern", Jack);
ERROR 1054 (42S22): Unknown column 'Jack' in 'field list'

The column names above are correct, and the error itself comes from the last entry in the VALUES() function.

The display_name column is of VARCHAR type, so MySQL expects you to insert a VARCHAR value into the column.

But Jack is not a VARCHAR value because it’s not enclosed in a quotation mark. MySQL considers the value to be a column name.

To fix the error above, simply add a quotation mark around the value. You can use both single quotes or double quotes as shown below:

INSERT INTO users(username, display_name) 
  VALUES ("jackolantern", 'Jack');

Now the INSERT statement should run without any error.

Fix ERROR 1054 on an UPDATE statement

To fix the 1054 error caused by an UPDATE statement, you need to look into the SET and WHERE clauses of your statement and make sure that the column names are all correct.

You can look at the error message that MySQL gave you to identify where the error is happening.

For example, the following SQL statement:

UPDATE users
SET username = "jackfrost", display_name = "Jack Frost"
WHERE user_name = "jackolantern";

Produces the following error:

ERROR 1054 (42S22): Unknown column 'user_name' in 'where clause'

The error clearly points toward the user_name column in the WHERE clause, so you only need to change that.

If the error points toward the field_list as shown below:

ERROR 1054 (42S22): Unknown column 'displayname' in 'field list'

Then you need to check on the SET statement and make sure that:

  • You have the right column names
  • Any string type values are enclosed in a quotation mark

You can also check on the table name that you specified in the UPDATE statement and make sure that you’re operating on the right table.

Next, let’s look at how to fix the error on an ALTER TABLE statement

Fix ERROR 1054 on an ALTER TABLE statement

The error 1054 can also happen on an ALTER TABLE statement.

For example, the following statement tries to rename the displayname column to realname:

ALTER TABLE users 
  RENAME COLUMN displayname TO realname;

Because there’s no displayname column name in the table, MySQL will respond with the ERROR 1054 message.

Conclusion

In short, ERROR 1054 means that MySQL can’t find the column name that you specified in your SQL statements.

It doesn’t matter if you’re writing an INSERT, SELECT, or UPDATE statement.

There are only two things you need to check to fix the error:

  • Make sure you’ve specified the right column name in your statement
  • Make sure that any value of string type in your statement is surrounded by a quotation mark

You can check on your table structure using the DESCRIBE or EXPLAIN statement to help you match the column name and type with your statement.

And that’s how you fix the MySQL ERROR 1054 caused by your SQL statements.

I hope this tutorial has been useful for you 🙏

I get an error when executing the below query:

ALTER TABLE property_res_details 
ADD CONSTRAINT PropertyIdLink FOREIGN KEY ( Property_ID )  
REFERENCES properties( Property_ID )  ON DELETE CASCADE ;


#1005 - Can't create table './resfi/#sql-10e1_8df.frm' (errno: 150)

What might I be doing wrong?

Linger's user avatar

Linger

14.9k23 gold badges52 silver badges79 bronze badges

asked Nov 25, 2009 at 8:15

Jimit's user avatar

This page might give a clue as to what’s going on…

Since you’re adding a foreign key, it sounds relevant.
It suggests you try

SHOW ENGINE INNODB STATUS;

to see the latest constraint error which may cause the error you’re seeing.

Maybe if you try

SET FOREIGN_KEY_CHECKS = 0; 

before your command, it will disable the checks and allow you to continue?

answered Nov 25, 2009 at 8:36

doza's user avatar

dozadoza

1,51111 silver badges14 bronze badges

1

Yeah, don’t you just love MySQL’s awesome error messages.

ADD CONSTRAINT PropertyIdLink FOREIGN KEY ( Property_ID )  
REFERENCES properties( Property_ID ) ON DELETE CASCADE;

Make sure that the Property_ID columns have the exact same datatype in both tables. That’s how I have fixed similar errors for myself in the past.

answered Nov 25, 2009 at 8:42

intgr's user avatar

intgrintgr

19.6k5 gold badges59 silver badges68 bronze badges

Ошибка структура базы данных имеет ошибки

После обновлений ошибка «структура базы данных имеет ошибки»

Добрый день! Обновил движок и возникла проблема

Ошибка! Структура базы данных имеет ошибки (нет таблиц: 0, нет полей: 0, поля отличаются: 1, нет индексов: 0). Всего 1, автоматически могут быть исправлены: 0.

Пробовал «Оптимизация БД» и «Проверка БД» ничего не помогает.
Кто знает как исправить. Спасибо.

Цитата
Ирина Боброва написал:
Всем добрый вечер! Столкнулись с проблемой: Структура базы данных Ошибка! Структура базы данных имеет ошибки (нет таблиц: 0, нет полей: 0, поля отличаются: 2, нет индексов: 0). Всего 2, автоматически могут быть исправлены: 0.
Может кто победил данную проблему, отпишитесь пожалуйста.

у вас картинки тоже перестали загружаться новые?

В общем эта проблема решается выполнением SQL запроса к базе данных через интерфейс Битрикса

Код

В таблице b_user_hit_auth поле TIMESTAMP_X «datetime NULL DEFAULT NULL » не соответствует описанию на диске «timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP»

ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;

ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` datetime NULL DEFAULT NULL ;

при выполнении данного запроса:
Запрос завершен, изменено 0 записей. (0.010 s)

Скажите пожалуйста, кто сталкивался с данной ошибкой

Цитата
SkyNetYar написал:
В общем эта проблема решается выполнением SQL запроса к базе данных через интерфейс Битрикса

Код

Не помогло( при этом запрос выполняется успешно), что ещё можно сделать?

Цитата
2016-Sep-06 21:27:40 Структура базы данных (check_mysql_table_structure): Fail ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP; Ошибка! Структура базы данных имеет ошибки (нет таблиц: 0, нет полей: 0, поля отличаются: 1, нет индексов: 0). Всего 1, автоматически могут быть исправлены: 0.

Выполните запрос к базе данных (Настройки > Инструменты > SQL запрос)

Цитата
ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
Цитата
SkyNetYar написал:
ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;

Не проходит.
Ошибка во время выполнения запроса:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ALT ER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT C’ at line 1!

После отключения Автокомпозита прошел запрос и ошибка ушла.

Код

После обновления системы, при попытке полного тестирования системы проявляется ошибка
Структура базы данных — Ошибочный ответ сервера. Не удалось завершить тестирование.
В логах Журнала проверки системы следующее ()

В таблице b_user_hit_auth поле TIMESTAMP_X «datetime NULL DEFAULT NULL » не соответствует описанию на диске «datetime NOT NULL
Структура базы данных (check_mysql_table_structure): Ok
41% done
Структура базы данных (check_mysql_table_structure): Ok
45% done
на 45% проверка останавливается и дальше не идет.

По поводу b_user_hit_auth поле TIMESTAMP_X
я проверил, что
В файле /bitrix/modules/main/install/mysql/install.sql

строка выглядит так как нужно —
INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))

Поддержка написала такое. Пожалуйста, обратитесь к администратору сервера или хостеру для выяснения причин и их устранения.

Пожалуйста, подскажите что можно предпринять?
Сразу отпишусь по результатам.

Ошибка SDBL 1С 8.3

Помощь персонального менеджера, оперативность сдачи отчетности, соответствие законодательству РФ

  • Исключение «простоев» работы сотрудников;
  • Устранение «плохих» блокировок;
  • Устранение таймаутов, диадоков, длительных запросов;
  • Управляемые блокировки.

Различные конфигурации 1С из-за сложности кода, бывает, огорчают администраторов и пользователей ошибками. Многие из них легко устраняются, но существуют и те, что способны испортить достаточно «крови» ИТ-службам. Одна из таких ошибок известна в кругах специалистов по 1С под именем «Ошибка SDBL».

Исправление ошибки SDBL в 1С

Обычно сообщение об ошибке SDBL мы видим при обновлении конфигурации, сохранении изменений или работе обменов данными. Чаще всего сопровождаться она следующими сообщениями:

  • Ошибка при полнотекстовом индексировании;
  • Попытка вставки значения недопустимого типа;
  • Поле таблицы не может принимать значение NULL;
  • Ожидается выражение (pos = );
  • Пропущена точка с запятой;
  • Выход за пределы размерности;
  • Поле определено неоднозначно.

Также эта ошибка может сопровождаться и другими информационными сообщениями. Чтобы решить эту проблему, администраторы 1С для начала применяют достаточно простые решения:

  1. Очистка КЭШа на сервере и компьютере пользователя, где появилась ошибка. Необходимо выйти из 1С, найти все папки с названиями типа «bd5c8ea4-b65f-4c23-a9c8-2dccfb0b15fa» в папке «Application Data» и удалить их;
  2. Перезагрузка сервера приложений 1С. Также может помочь включение и выключение всех связанных сервисов – SQL и его агента. Заходим на сервер, находим службу «Агент сервера 1С» и останавливаем ее с помощью контекстного меню. Аналогично поступаем со службами «SQL Server» и «Агент SQL Сервера» на сервере SQL. Затем включаем в обратной последовательности;
  3. Механизм «Тестирование и исправление ИБ», доступный в конфигураторе. В нужной информационной базе заходим в «Администрирование» — «Тестирование и исправление. » и запускаем процесс;
  4. Выгрузка базы данных в файл формата DT и загрузка его обратно в ту же информационную базу. Также выполняется в режиме конфигуратора через меню «Администрирование». Используются команды «Выгрузить информационную базу. » и «Загрузить информационную базу. »;
  5. Загрузка из резервной копии, если она сделана недавно. Резервные копии необходимо делать регулярно и дополнительно перед каждым серьезным действием с информационной базой. Резервные копии можно делать с помощью SQL MS или конфигуратора через выгрузку файла формата dt;
  6. Обновление платформы до более новой версии с официального портала ИТС. Необходимо скачать с сайта ИТС последний релиз платформы и установить на сервере и клиентских компьютерах.

Если все эти методы не дали результата, то для клиент-серверного варианта базы 1С можно попробовать очистить таблицы _ConfigChngR_ExtProps и _ConfigChngR. Делать это доверьте профессионалу, умеющему работать с MSSQL. В подавляющем большинстве случаев один из этих методов обязательно поможет. Если же ошибка осталась, и у вас нет резервной копии, следует обратиться к профессионалам за помощью.

Восстановление структуры DBSchema

Ситуация

Маленькая файловая база Бух3, учёт ведется 4 года, во время очередного обновления вылетает конфигуратор, при повторной попытке обновления имеем сообщение о невозможности применить изменения конфигурации.

Стандартный алгоритм действий:

  1. Долго себя ругаем за лень при создании архива перед обновлением;
  2. Откатываем конфигурацию на версию БД. При попытке запустить базу – ошибка, что таблица такая-то не найдена и вылет;
  3. Конфигуратор – тестирование и исправление, опять ошибка, что таблица такая-то отсутствует и невозможность ремонта;
  4. Попытка залить предыдущую типовую конфигурацию – опять критическая ошибка SDBL ;
  5. Последняя попытка – выгрузка базы в DT , проходит частично и вылетает. При загрузке DT – получаем базу с 90% пустых таблиц и сохранившейся ошибкой при тестировании и исправлении.
  6. С удивлением узнаем, что у админа нет архивных копий от слова совсем;
  7. Осознание того, что проблема серьезная и требуется помощь. Отправка запроса в 1С и замечательный ответ о том, что ваша база разрушена, поэтому восстановите базу из архивной копии и будет вам хорошо.
  8. Гуглим, находим “ Tool 1 CD ”, с горечью осознаём, что с версией 8.3.8 он работает только на чтение. Вывод – что-то чинить можно в режиме SQL .
  9. Загружаем базу из ранее выгруженного DT . Получаем те же проблемы, но на этот раз можно использовать Profiler и, например, создать недостающие таблицы, поля.
  10. Некоторое время закрываем проблемы по отсутствующим полям на SQL , пока не получаем вот такое сообщение

    При условии работающей базы, мы вполне можем узнать что это за регистр, но работающей базы у нас нет, от слова совсем.
  11. Опять гуглим на предмет: «А что такое схема базы данных», и вот тут информация крайне скудная. Официальная трактовка от 1С:
  12. Открываем эту табличку в SQL , это бинарные данные. Выгружаем их в файлик, открываем его Notepad ++ и видим набор массивов с описанием полей базы:

    Попытка найти информацию о том, что же это всё такое – результат нулевой. Ок, значит разбираться придётся самому. Перечитывание нескольких статей на инфостарте даёт понимание необходимости просмотра также данных сопоставление объектов конфигурации в файлике DBNames и самой конфигурации 1С.
  13. Проблема, как найти идентификаторы объектов конфигурации 1С, решилась выгрузкой конфигурации в XML . Предварительно файл cf был выгружен с помощью Tool 1 CD и загружен в чистую базу на SQL .
  14. Далее путем поиска таблицы в DBNames получаем её идентификатор, и ищем по нему в каталоге с выгруженной конфигурацией XML . Находим, удаляем объект в конфигураторе, снова попытка сохранения – другая ошибка, на другую таблицу… в общем повторяем итерацию в надежде вылечить базу до тех пор, пока не получаем вот такую ошибку:
  15. И это серьезная засада, потому как непонятно что ещё можно удалить из конфигуратора. Можно конечно запустить Profiler и найти на какую таблицу он ругается. Но в конце концов это всё закончилось такой ошибкой на поле Fld 793 (ОбластьДанныхОсновныеДанные), и по профайлеру всё останавливается после проверки таблицы журналов и всё, вылетает.
  16. В итоге приходим к выводу, что «скотчем и соплями» проблему не решить, и придётся подходить к вопросу системно.

Инструментарий

  1. Загрузка/выгрузка данных из DBSchema и DBNames (используя алгоритм Deflate);
  2. Загрузка схемы объекта из чистой эталонной базы, автозамена реквизитов объекта на наши. Добавление/замена схем объектов в DBSchema ;
  3. Проверка и автоматическое(не все) создание недостающих схем объектов, проверка реквизитов в таблице DBNames ;
  4. Реструктуризация таблиц SQL , добавление/замена полей(не все);
  5. Загрузка в таблицы SQL , выгруженные из файловой базы с помощью Tool 1CD

upd. 2019.07.13 — Добавлена интеграция с обработкой //infostart.ru/public/275315/. Подключаемся к «убитой» базе, читаем список таблиц и загружаем напрямую нужные таблицы в SQL

Причины купить

Экономия собственного времени на решение подобной задачи

Достоинства

Обработка предназначена ТОЛЬКО для программистов 1С. Написана под конкретные проблемы конкретной базы. Автоматически восстанавливаются схемы Справочников, Документов, Журналов документов, Регистров сведений, Регистров накопления, Констант, Перечислений, Регламентных заданий. остальные объекты править ручками, либо писать код по аналогии с моим.

Типовые битрикс ошибки

1.Duplicate entry ‘H1vyYZlZDAeRMeZJ76uKHWozRqctgvK1’ for key ‘PRIMARY’
Нужно снести содержимое базы и заново попытаться восстанавливать сайт из резервной копии, также нужно посмотреть включено ли хранение сессий в отдельной базе данных в настройках расширенного режима безопасности группы администратор, отключить такую настройку.

2. Превышен лимит на размер базы данных
На виртуальном хостинге есть ограничения размеров базы данных. Если размер базы превысит лимит, вам начнут высылаться уведомления. При превышении максимального размера высылается предупреждение с последующей блокировкой до момента устранения проблемы. В этом случае нужно или повысить тариф, или смотреть содержимое базы. В моем случае таблицы b_event_log — много места занимала, b_event — очень много было, b_captcha — также много было. Нужно войти в Phpmyadmin и в базе очистить указанные таблицы.

3. Allowed memory size of
Откройте файл php.ini и найдите там строку: memory_limit = 256M, увеличьте значение (для тарифов виртуального хостинга есть ограничения)

4. Cannot use BitrixMainTextString as String because ‘String’
нет обновлений битрикс для используемой версии РНР, обычно проблема возникает при восстановлении сайта на другом хостинге. Пробуйте начать с версии РНР 5.6

5. DB query error. Please try later
Обычно ошибка доступа к базе данных
1) Открой файл /bitrix/php_interface/dbconn.php и вставь в самый низ файла строку $DBDebug=true;

6. max_input_vars
В файле .htaccess задайте php_value max_input_vars 10000, но не всегда помогает для изменения данной директивы необходимо отредактировать файл php.ini: max_input_vars = 10000

7. Maximum execution time of 60 seconds exceeded
Могут помочь такие варианты:
1) после внесения изменений в php.ini требуется рестарт apache.
2) если определена переменная set_time_limit в файле /bitrix/php_interface/dbconn.php то она имеет приоритет по сравнению с тем что хранится в php.ini в max_execution_time
3) ошибка может возникать из-за нехватки значения параметра memory_limit(также определяется в этих файлах)

8. MySQL server has gone away
В процессе выполнения запроса сервер оборвал соединение. Проблема связана с настройкой MySQL и часто возникает когда на сервере установлен небольшой лимит времени на соединение.
Установите в bitrix/php_interface/after_connect.php:
$DB->Query(«SET wait_timeout=28800»);

9. opcache.revalidate_freq для битрикс
Мне помогает связка в файле .htaccess, особенно на тарифе host-0 reg.ru, который не сильно подходит для битрикс тарифа:
php_value opcache.revalidate_freq 0
php_value max_input_vars 10000
php_value default_socket_timeout 60
Также помогает переход на РНР 7.0

10. Query Error SET LOCAL time_zone
на виртуалке битрикс
$DB->Query(«SET LOCAL time_zone=’».date(‘P’).»‘»);

11. Кодировка таблицы (cp1251) отличается от кодировки базы (utf8)
Для той таблицы на которую указывает ошибка потребуется выполнить ряд SQL запросов в базе данных:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ciДля смены кодировки таблиц выполните, пожалуйста, запрос для каждой таблицы:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

12. Ошибка больших файлов импорта
Потребуется увеличить лимиты размера файлов в файле php.ini.

13. Ошибка! Структура базы данных имеет ошибки- поля отличаются
Смотрим название таблиц в логах
Перейдите, пожалуйста, в sql-строку (Настройки > Инструменты > SQL запрос) и там выполните запрос:
ALTER TABLE `b_ticket` MODIFY `TITLE` varchar(255) NOT NULL ;
ALTER TABLE `b_ticket` MODIFY `OWNER_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `LAST_MESSAGE_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `SUPPORT_COMMENTS` varchar(255) NULL DEFAULT NULL ;

После этого переустановите (удалить и снова установить) модуль поиска без сохранения
таблиц (Настройки-Настройки продукта-Модули).

Затем нужно выполнить полную переиндексацию. Для этого в административной части сайта перейдите,
пожалуйста, в «Настройки > Поиск > Переиндексация». Снимите галочку «Переиндексировать только измененные»,
установите шаг, например, 10 секунд и нажмите кнопку «Переиндексировать».

Ещё статьи:

31.03.2020 Где искать редирект в Битриксе?
Как найти причину редиректа средствами битрикс. При попытке добавить сайт, его редиректом перекидывает на основной сайт.
ID: 223

31.03.2020 Зависает установка сайта Битрикс при многосайтовости
При установке сайта при многосайтовости зависает на 0%, и ничего не происходит, ошибок не выдаёт. Причина оказалась довольно простая. ID: 222

07.03.2020 Мифы про дорогих Битрикс программистов
Есть навязываемый миф о дорогих Битрикс программистах. На самом деле цена на услуги специалиста напрямую зависит от уровня его навыков в не зависимости. ID: 220

Новые статьи в блоге:

25.02.2020 Ошибка агента eval()’d. Как отключить агенты если сайт не работает?
Словил как-то ошибку связанную с отработкой агента. сайт полностью перестал работать и админка тоже. Возник вопрос как отключить агенты в таком случае. ID: 218

17.01.2020 Когда битрикс г*вно, а SEO специалист «Бог»
Я теперь понял откуда ноги растут про кривой битрикс. Всё дело в кривых специалистах. Вот один характерный случай. ID: 216

Как исправить ошибку «Ошибка! Структура базы данных имеет ошибки»

Почему появляется ошибка?

Данная ошибка появляется в случае, когда структура базы данных не совпадает со структурой, расположенной в установочных sql-файлах. Обычно это возникает при установке обновлений.

На что эта ошибка влияет?

В большинстве случаев ошибки структуры не влияют на работу сайта, т.к. содержат незначительные различия.

Но иногда проблемы бывают серьезные — например, из-за различий в кодировке и др.

Как исправить ошибку?

В большинстве случаев ошибка исправляется автоматически, при нажатии на ссылку «Исправить». При этом структура переносится из файлов в БД. К примеру, если в установочном sql-файле некоторое поле имеет тип longtext, а в БД оно имеет тип text, то в процесс автоматического исправления тип поля в БД станет longtext.

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

В таблице b_adv_contract поле KEYWORDS «`KEYWORDS` longtext NULL DEFAULT NULL» не соответствует описанию на диске «`KEYWORDS` text NULL DEFAULT NULL»

Требуется наша помощь?

Мы имеем огромный опыт, на протяжении 10 лет помогая клиентам в решении самых различных проблем на их сайтах.

Поэтому, если Вы не имеете возможности решить эту проблему самостоятельно, обращайтесь к нам — мы все сделаем оперативно и квалифицированно.

Способы исправления ошибок, выявленных при полном тестировании системы в 1С-Битрикс

Модули веб-сервера

Ошибка: Загружен модуль mod_dav/mod_dav_fs, WebDav не будет работать
Решение: Удалите файл /etc/httpd/conf.modules.d/00-dav.conf

Размер стека и pcre.recursion_limit

Ошибка: Замечание. Возможны проблемы в работе с длинными строками из-за системных ограничений
Решение: Как правило, для корректной работы 1С-Битрикс требуется снижение значения pcre.recursion_limit до 1000. Для этого нужно прописать правило в файле php.ini или в .htaccess, если у вас виртуальный хостинг и нет доступа к настройкам сервера.

VDS хостинг

  1. В файле /etc/php.d/bitrixenv.ini изменим параметр:
    pcre.recursion_limit=100000
  2. В скрипте запуска сервера HTTP Apache /etc/rc.d/init.d/httpd изменим функцию start(), добавив в нее одну строку ulimit -s unlimited
  3. В итоге должно получиться примерно следующее:
    start() {
      echo -n $"Starting $prog: "
      ulimit -s unlimited
      LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
      RETVAL=$?
      echo
      [ $RETVAL = 0 ] && touch ${lockfile}
      return $RETVAL
    }

Виртуальный хостинг

Для виртуального хостинга в файле .htaccess

php_value pcre.recursion_limit 100000

Режим работы MySQL

Ошибка: innodb_strict_mode=ON, требуется OFF
Решение: После обновления 1C-Битрикс, а конкретно модуля main 19.0.400 добавилась новая проверка. Исправление выйдет в следующих версиях BitrixVM. А сейчас можно исправить так:

Вариант 1

  1. Подключиться к серверу под root
  2. Открыть один из файлов (у всех могут быть разные, варианты)
    • /etc/my.cnf
    • /etc/alternatives/my.cnf
    • /etc/bitrix-my.cnf
  3. Добавить строку в блоке # InnoDB parameters
    innodb_strict_mode = OFF

Вариант 2

  1. В файл after_connect.php добавить:
    $DB->Query("SET innodb_strict_mode='OFF'");
  2.  В файл after_connect_d7.php добавить:
    $connection->queryExecute("SET innodb_strict_mode='OFF'");

Структура базы данных

Ошибка: В таблице b_search_content_stem поле STEM «varchar(50) NOT NULL» не соответствует описанию на диске «int(11) NOT NULL»
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: В таблице b_search_content_freq поле STEM «varchar(50) NOT NULL DEFAULT «» » не соответствует описанию на диске «int(11) NOT NULL DEFAULT «0» «
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: Структура базы данных: Ошибочный ответ сервера. Не удалось завершить тестирование.
Решение: В файле /bitrix/modules/main/install/mysql/install.sql найти строку:

INDEX ix_module_to_module(FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD)

и заменить на:

INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))

Ошибка: В таблице b_user_hit_auth поле TIMESTAMP_X «datetime NULL DEFAULT NULL » не соответствует описанию на диске «timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP»
Решение: Выполнить запрос в Настройки → Инструменты → SQL запрос:

ALTER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;

MySQL возвращает эту ошибку (скорее всего), потому что нет уникального индекса, определенного в столбце id. (MySQL требует, чтобы был уникальный индекс. Другая возможность, которую вы уже поняли, состоит в том, что в таблице может быть только один столбец, определенный как AUTO_INCREMENT.)

Чтобы этот столбец был AUTO_INCREMENT, вы можете добавить ограничение UNIQUE или ограничение PRIMARY KEY в столбце id. Например:

ALTER TABLE `blog` ADD CONSTRAINT `blog_ux` UNIQUE (`id`) ;

(Обратите внимание, что этот оператор возвращает ошибку, если для столбца id существуют одинаковые значения.)

В качестве альтернативы вы можете сделать столбец id основным символом таблицы (если в таблице еще нет ограничения PRIMARY KEY).

ALTER TABLE `blog` ADD PRIMARY KEY (`id`) ;

(Обратите внимание, что этот оператор возвращает ошибку, если для столбца id существует любое дублирующее значение, или если в этом столбце есть значения NULL, если в таблице есть ограничение PRIMARY KEY.)

Понравилась статья? Поделить с друзьями:
  • Ошибка mysql no such file or directory
  • Ошибка mysql invalid default value for
  • Ошибка mysql host is not allowed
  • Ошибка mysql error the error returned was
  • Ошибка mysql duplicate entry 1 for key primary