我正在尝试在Laravel中迁移用户表.当我运行迁移时,我收到此错误:
[Illuminate\Database\QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节(SQL:alter table
usersadd unique users_email_uniq(
我的迁移如下:
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name', 32);
$table->string('username', 32);
$table->string('email', 320);
$table->string('password', 64);
$table->string('role', 32);
$table->string('confirmation_code');
$table->boolean('confirmed')->default(true);
$table->timestamps();
$table->unique('email', 'users_email_uniq');
});
Run Code Online (Sandbox Code Playgroud)
经过一些谷歌搜索我遇到了这个错误报告,泰勒说你可以指定索引键作为unique()我做的第二个参数.它仍然给出了错误.这里发生了什么?
Laravel 5.4上的迁移错误 php artisan make:auth
[Illuminate\Database\QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节(SQL:alter tabl e
usersadd uniqueusers_email_unique([PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节
我想知道是否可以使用注释attributes使用JPA2在以下类中持久保存地图
public class Example {
long id;
// ....
Map<String, String> attributes = new HashMap<String, String>();
// ....
}
Run Code Online (Sandbox Code Playgroud)
由于我们已经有一个预先存在的生产数据库,所以理想情况下,值attributes 可以映射到以下现有表:
create table example_attributes {
example_id bigint,
name varchar(100),
value varchar(100));
Run Code Online (Sandbox Code Playgroud) 我知道有很多关于此的问题,但我认为我的数学是正确的.
255 * 3 = 765字节除非UNQUE每个条目需要额外的200多个字节,为什么这不起作用?
mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
Run Code Online (Sandbox Code Playgroud)
我能做些什么吗?
编辑:
事实证明,限制是250.对于唯一索引,字符似乎计为4个字节,但我不知道为什么.
编辑2:
感谢Vladislav Vaintroub,charset确实是utf8mb4.这解决了这个谜.我没有看到有关此更改的任何文档.
我猜它通过隐式截断字段来构建非唯一索引,这对于唯一索引是不可接受的,所以它拒绝.
如果您重新输入您的评论作为答案,我很乐意接受.
解决方案:指定utf8,而不是utf8mb4(MySQL Admin不允许这样做,因此请手动创建表)
假设我有'主题'表
CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**)
Run Code Online (Sandbox Code Playgroud)
和关联的映射对象,
@Entity
@Table(name="subject")
public class SubjectDO {
@Id
@Column(name="id")
int id;
@Column(name="name", unique=true)
String name;
...
// Getter-Setter methods
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保存具有重复'name'的对象时,有或没有'unique = true'定义,我得到类似的行为(相同的异常.)而且很明显JPA实现不能真正做任何事情,除非伸手到DB为检查.
它的真实用例是什么?
(我在这里假设,唯一约束也在数据库级别定义.)
我无法创建索引varchar(500).
MySQL的: Specified key was too long; max key length is 1000 bytes
我复制了一个带有流浪盒的项目,它安装了Debian,Nginx,PhpMyAdmin,..随着新项目,Laravel php artisan migrate不再工作,我得到错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1709 Index column size too large. The maximum column size is 767 bytes. (SQL: alter table `courses` add unique `courses_name_unique`(`na
me`))
Run Code Online (Sandbox Code Playgroud)
当我创建工作项目数据库的转储(结构+数据)并将其导入数据库时给出迁移时的错误,然后一切正常,它创建所有表和数据导入..
如何修复大小以便我可以运行migrate方法?
当我运行一个与MySQL有关的程序时,我收到了以下错误消息:
2015-06-10 15:41:12,250 ERROR app.wsutils 419 INCRON:错误:('HY000','[HY000] [MySQL] [ODBC 5.2(w)驱动程序] [mysqld-5.7.7-rc-log]索引列大小太大.最大列大小为767字节.(1709)(SQLExecDirectW)')
我用Google搜索了一下,发现此错误可能与该innodb_large_prefix选项有关.但是,我使用的是MySQL 5.7.7 rc,它已经设置innodb_large_prefix为"ON"(在MySQL Workbench中检查),允许最多3072个字节.我不确定这是不是问题innodb_large_prefix.
无论如何,有没有人知道如何解决这个问题?
我在MySQL中有一个包含30列和数千个条目的表.
有没有办法让每一行都是唯一的,这意味着如果一行已经存在,我就不能再次进入该行了.
我不能在这里使用主键或唯一键,因为每个列都可以重复.
我希望这行是唯一的.例如: - 有一个表格
columns->name,age,height,weight.
Run Code Online (Sandbox Code Playgroud)
在这一列中,我不能使任何一列或两列唯一,但我不应该有两个具有所有相同数据的条目.
CREATE TABLE mini
(
realurl varchar(200) NOT NULL,
catagory varchar(200),
PRIMARY KEY (realurl,catagory),
FOREIGN KEY (realurl) REFERENCES main(realurl)
)
Run Code Online (Sandbox Code Playgroud)
错误:`#1071 - 指定密钥太长; 最大密钥长度为1000字节
为什么我不能创建这个表?我应该更改什么来创建此表?