На сервере мое приложение ищет имя таблицы верхнего регистра вместо строчной буквы

У меня есть эта таблица на моем локальном xampp, имя таблицы tags, это отлично работает в моей локальной системе, но когда я загружаю эту таблицу на свой сервер, я получаю следующую ошибку:

введите описание изображения здесь

Таблицы, которые есть в таблице peckinga_blog, следующие:

введите описание изображения здесь

Как вы можете видеть, tags является одним из них. Также для таблицы tags у меня есть следующие миграции в моем приложении laravel:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTagsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Tags', function (Blueprint $table) {
            $table->increments('id');
            $table->mediumText('tag');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('Tags');
    }
}

Теперь почему я получаю эту ошибку, несмотря на то, что моя база данных явно доступна? Что я могу сделать, чтобы мой сервер будет искать базу данных tags вместо tags?

Ответ 1

В моем коде была следующая строка:

    $tags = DB::table('Tags')->get();

отлично работал локально на моих окнах XAMPP, но нужно было изменить его на:

    $tags = DB::table('Tags')->get();

для работы на моем сервере.

Ответ 2

Имена баз данных и таблиц не чувствительны к регистру в Windows и чувствительны к регистру в большинстве разновидностей Unix или Linux. Названия таблиц в MySQL - это записи в файловой системе, поэтому они нечувствительны к регистру, если базовая файловая система.

Хотя после применения миграции он должен работать. Но если он не работает и вы хотите, чтобы оба оператора, например, нижний регистр и имя верхнего регистра в таблице, были успешными, вам нужно поместить следующую строку

lower_case_table_names = 1

в вашем /etc/my.cnf или где бы вы не сохраняли конфигурацию MySQL.

Значения таблиц, генерированных капиталом /CamelCase Doctrine, и MySQL хранит их как строчные буквы!

Или

  • Перед экспортом базы данных из локального компьютера вы можете выполнить следующие действия:

  • откройте файл конфигурации MySQL: [диск]\xampp\mysql\bin\my.ini

  • искать: # Сервер MySQL [mysqld]

  • добавить это прямо под ним: lower_case_table_names = 2

  • сохранить файл и перезапустить службу MySQL

Обязательно добавьте системную переменную в раздел [mysqld] конфигурационного файла.

Для получения дополнительной информации вы можете проверить ссылку на ссылку MySQL.

Ответ 3

чувствительность к регистру зависит от вашей базовой файловой системы, что объясняет несоответствие между вашей локальной и производственной машиной.

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

если вам нужно переименовать свою таблицу, сначала переименуйте ее в something_else, а затем снова в Tags.