Таблица 'db.x' не существует и Неизвестный столбец: импортируйте SQL файл
Скрипт FiveM не работает с 'Table doesn't exist' или 'Unknown column'? Импортируйте его .sql файл с HeidiSQL или mysql CLI, выберите нужную базу данных и запустите обновления.
Ваша консоль показывает ошибку базы данных, и скрипт, который это вызвал, перестает работать:
Table 'fivem.my_table' doesn't exist
Unknown column 'plate' in 'field list'oxmysql показывает те же ошибки, что и ER_NO_SUCH_TABLE и ER_BAD_FIELD_ERROR. Эта статья охватывает, что они означают и как исправить оба: импортировать SQL файл скрипта в нужную базу данных и запустить его обновления.
Что означают две ошибки
- Таблица не существует. Скрипт запрашивает таблицу, которая никогда не была создана в базе данных, к которой подключен ваш сервер.
- Неизвестный столбец. Таблица существует, но она не имеет столбца с этим названием. Таблица взята из более старой версии или более старого SQL файла.
В обоих случаях скрипт в порядке. База данных не совпадает с тем, что ожидает скрипт.
Шаг 1: найдите правильную базу данных
Перед импортом чего-либо проверьте, какую базу данных использует сервер. Это последняя часть строки подключения в server.cfg:
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"Здесь база данных - fivem. Если вы импортируете в другую, например test или mysql, скрипт не увидит таблицы. Если само подключение не удается, начните с oxmysql can't connect.
Шаг 2: импортируйте .sql файл
Найдите файл в папке скрипта. Он называется install.sql, database.sql или по названию скрипта. Откройте его в текстовом редакторе сначала: если он имеет строку USE some_database;, убедитесь, что она совпадает с вашей базой данных или удалите ее.
С HeidiSQL
- Откройте вашу сессию и подключитесь.
- В левом дереве щелкните вашу базу данных (например
fivem), чтобы она была выбрана. - Откройте меню File и выберите Run SQL file, затем выберите
.sqlфайл. - Обновите дерево с F5, и новые таблицы появятся под базой данных.
С командной строкой mysql
mysql -u fivem -p fivem < /path/to/install.sqlВторой fivem - это имя базы данных. В Windows PowerShell < работает не так же, поэтому запустите из cmd или используйте HeidiSQL.
С phpMyAdmin
Выберите базу данных в левом списке, откройте вкладку Import, выберите файл и запустите его.
Внимание: создайте резервную копию базы данных перед импортом или изменением чего-либо. Дамп занимает секунды:
mysqldump -u fivem -p fivem > backup.sql.
Шаг 3: примените обновления и миграции
Когда таблица существует, но столбец отсутствует, обновление добавило его. Скрипты обрабатывают это двумя способами:
- Файл обновления такой как
update.sql. Запустите только операторы, которые новее версии, которую вы установили, так как запуск старых снова не удастся сTable ... already exists. - Строка в журнале изменений или документы с
ALTER TABLE, которую нужно запустить.
ALTER TABLE, который добавляет столбец, выглядит так:
ALTER TABLE `my_table` ADD COLUMN `plate` VARCHAR(12) NULL;Некоторые скрипты создают или изменяют свои таблицы сами при запуске. Если ваш делает, перезагрузите скрипт и смотрите консоль перед тем, как что-либо делать вручную.
Совет: если ошибка появляется только для некоторых игроков, посмотрите, какой столбец она называет. Столбец, добавленный в обновление, часто отсутствует только на серверах, которые обновили скрипт без запуска обновления.
Чувствительность к регистру в Linux
В Linux MariaDB и MySQL по умолчанию рассматривают имена таблиц как чувствительные к регистру. Таблица, созданная как Owned_Vehicles, не найдена запросом на owned_vehicles, даже если она работает на ПК с Windows.
Исправление - заставить имена совпадать, а не изменять настройку сервера:
RENAME TABLE `Owned_Vehicles` TO `owned_vehicles`;Держите имена таблиц в нижнем регистре при создании, и импортируйте из файла с именами, которые использует скрипт.
Таблицы фреймворка также отсутствуют
Если отсутствующая таблица принадлежит фреймворку, такая как users, jobs или owned_vehicles на ESX, или players на QBCore, базовый SQL никогда не был импортирован. Этот файл поставляется с фреймворком:
- ESX Legacy: файл
.sqlвнутриes_extended(и его дополнительные ресурсы). - QBCore или QBox: файл
.sqlв загрузке фреймворка. Некоторые рецепты в txAdmin создают эти таблицы для вас.
Скрипт не может работать до тех пор, пока не существуют собственные таблицы фреймворка, поэтому импортируйте их в первую очередь.
Очистите остатки
После импорта перезагрузите скрипт, чтобы он прочитал новые таблицы:
restart my_scriptЕсли та же ошибка вернется, прочитайте ее снова. Другое имя таблицы или имя базы данных в сообщении означает, что вы исправили одну проблему и достигли следующей. Когда причиной является запрос скрипта, how to read a script error помогает вам найти файл и строку.
Контрольный список
| Симптом | Решение |
|---|---|
Table 'db.x' doesn't exist |
Импортируйте .sql файл скрипта в базу данных из mysql_connection_string |
| Импортирована, но все еще отсутствует | Вы выбрали другую базу данных; проверьте имя в server.cfg |
Unknown column |
Запустите обновление или ALTER TABLE для версии, которую вы установили |
Table ... already exists на импорте |
Вы запустили файл install дважды; запустите только операторы обновления |
| Работает в Windows, не удается в Linux | Имена таблиц чувствительны к регистру; переименуйте в нижний регистр |
| Таблицы фреймворка отсутствуют | Импортируйте базовый SQL ESX, QBCore или QBox сначала |
Короткие ответы
Где находится .sql файл скрипта?
Обычно в папке скрипта, рядом с fxmanifest.lua, как install.sql, database.sql или имя, соответствующее скрипту. Если страница скрипта или документы упоминают таблицу, этот файл нужно импортировать.
Нужно ли импортировать SQL файл снова при обновлении скрипта?
Только когда обновление добавляет таблицу или столбец. Ищите update.sql или заметку в журнале изменений и запустите только новые операторы, так как старые не сработают на уже существующих таблицах.
Почему таблица существует на моем ПК, но не на хосте Linux?
Linux рассматривает имена таблиц как чувствительные к регистру. Players и players - это две разные таблицы там, в то время как Windows рассматривает их как одно и то же.

