我在本地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
?
答案 0 :(得分:11)
数据库和表名在Windows中不区分大小写,在大多数Unix或Linux中都区分大小写。 MySQL中的表名是文件系统条目,因此如果底层文件系统是。
,它们不区分大小写虽然在应用迁移之后,它应该可以工作但是如果它不起作用并且你想要两个语句,即表中的小写和大写名称成功,你需要放下以下行
lower_case_table_names = 1
在你的/etc/my.cnf或你保留MySQL配置的任何地方。
Doctrine生成大写/ CamelCase表名,MySQL将它们存储为小写!
或
在从本地导出数据库之前,您可以执行以下步骤:
打开您的MySQL配置文件:[drive] \ xampp \ mysql \ bin \ my.ini
查找:#MySQL服务器[mysqld]
在它下方添加:lower_case_table_names = 2
保存文件并重启MySQL服务
请务必将系统变量添加到配置文件的[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
。