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

时间:2017-01-31 21:24:27

标签: php mysql laravel laravel-5

我在本地xampp上有这个表,表名是tags,这在我的本地系统上完全正常,但是当我将这个表上传到我的服务器时,我收到以下错误:

enter image description here

peckinga_blog下的表格如下:

enter image description here

正如您所看到的,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

3 个答案:

答案 0 :(得分: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服务

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

    有关详细信息,请查看MySQL Reference Link

答案 1 :(得分:8)

我的代码中有以下行:

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

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

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

在我的服务器上工作。

答案 2 :(得分:5)

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

因为这是一个常见的问题,所以我建议使用小写的全面公式作为约定。在您的迁移中以及model中将Tags更改为tags,您应该很高兴。

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