在服务器上,我的应用程序正在查找大写表名而不是小写

Ale*_*nik 12 php mysql laravel laravel-5

我在本地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');
    }
}
Run Code Online (Sandbox Code Playgroud)

既然我的数据库清晰可用,为什么我会得到这个错误?我该怎么做才能使我的服务器找到数据库tags而不是Tags

Dee*_*kar 11

数据库和表名在Windows中不区分大小写,在大多数Unix或Linux中区分大小写.MySQL中的表名是文件系统条目,因此如果是基础文件系统,它们不区分大小写.

虽然在应用迁移后,它应该工作但是如果它不工作并且你想要两个语句,即表中的小写和大写名称成功,你需要把以下行

lower_case_table_names = 1

在/etc/my.cnf或您保存MySQL配置的任何地方.

Doctrine生成大写/ CamelCase表名,MySQL将它们存储为小写!

要么

  1. 在从本地导出数据库之前,您可以执行以下步骤:

  2. 打开你的MySQL配置文件:[drive]\xampp\mysql\bin\my.ini

  3. 查找:#MySQL服务器[mysqld]

  4. 在它下面添加:lower_case_table_names = 2

  5. 保存文件并重启MySQL服务

务必将系统变量添加到配置文件的[mysqld]部分.

有关更多信息,请查看MySQL参考链接.


Ale*_*nik 8

我的代码中有以下行:

    $tags = DB::table('Tags')->get();
Run Code Online (Sandbox Code Playgroud)

在我的窗户上完美地工作XAMPP,但需要将其更改为:

    $tags = DB::table('tags')->get();
Run Code Online (Sandbox Code Playgroud)

在我的服务器上工作.

  • Windows文件系统不区分大小写,Linux fileystsems则不区分大小写.我猜你做了一些WindowsDev,所以习惯了pascal案例? (4认同)
  • 我会说下次有点小心你的赏金申请,因为我要给出这个答案,但你在赏金之前自己回答. (2认同)

pas*_*der 5

区分大小写取决于您的基础文件系统,这解释了本地和生产计算机之间的差异.

因为这是一个常见的问题,我建议使用小写的全面公式作为约定.改变你Tagstags你的迁移以及在你的模型,你应该是好去.

如果您需要重命名表格,请先将其重命名为something_else,然后再重命名为tags.