【问题标题】:On server my application is looking for uppercase table name instead of lowercase在服务器上,我的应用程序正在寻找大写的表名而不是小写
【发布时间】:2017-06-17 11:45:12
【问题描述】:

我的本​​地 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

【问题讨论】:

  • 将代码中“Tags”的所有实例更改为“tags”
  • 将其从标签更改为标签?或者将数据库中的表名从标签更改为标签?
  • 如果我在 phpmyadmin 中将 tags 重命名为 Tags,我会收到一条错误消息,显示为 tags 已存在。

标签: php mysql laravel laravel-5


【解决方案1】:

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

虽然在应用迁移之后,它应该可以工作但是如果它不起作用并且您希望两个语句(即表中的小写和大写名称)都成功,您需要输入以下行

lower_case_table_names = 1

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

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

或者

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

  2. 打开您的 MySQL 配置文件:[驱动器]\xampp\mysql\bin\my.ini

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

  4. 在其正下方添加:lower_case_table_names = 2

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

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

更多信息您可以查看MySQL Reference Link

【讨论】:

    【解决方案2】:

    我的代码中有以下行:

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

    在我的 Windows XAMPP 本地完美运行,但需要将其更改为:

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

    在我的服务器上工作。

    【讨论】:

    • Windows 文件系统不区分大小写,Linux 文件系统不区分大小写。我猜你做了一些 WindowsDev 并且习惯于帕斯卡大小写?
    • @RichardVanbergen 是的 :) :)
    • 我会说下次在申请赏金时要小心一点,因为我要给出这个答案,但你在赏金结束之前自己回答了。
    【解决方案3】:

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

    由于这是一个常见问题,我建议使用小写全写作为惯例。在您的迁移和model 中将您的Tags 更改为tags,您应该一切顺利。

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

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2020-05-05
      • 2011-03-06
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 2015-07-08
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多