相关疑难解决方法(0)

Laravel迁移:即使指定,唯一键也太长

我正在尝试在Laravel中迁移用户表.当我运行迁移时,我收到此错误:

[Illuminate\Database\QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节(SQL:alter table usersadd unique users_email_uniq(email))

我的迁移如下:

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()我做的第二个参数.它仍然给出了错误.这里发生了什么?

php mysql laravel

150
推荐指数
16
解决办法
21万
查看次数

Laravel Migration Error:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节

Laravel 5.4上的迁移错误 php artisan make:auth

[Illuminate\Database\QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节(SQL:alter tabl e usersadd unique users_email_unique(email))

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长; 最大密钥长度为767字节

mysql pdo laravel laravel-5 laravel-5.4

134
推荐指数
20
解决办法
13万
查看次数

使用JPA存储Map <String,String>

我想知道是否可以使用注释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)

java orm jpa jpa-2.0

96
推荐指数
2
解决办法
6万
查看次数

MySQL VARCHAR(255)UTF8对于密钥太长,但最大长度为1000字节

我知道有很多关于此的问题,但我认为我的数学是正确的.

  • MySQL为每个UTF8字符保留3个字节.
  • MyISAM允许长度为1000字节的密钥.
  • 我的UTF8 VARCHAR(255)应该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不允许这样做,因此请手动创建表)

mysql utf8mb4

42
推荐指数
3
解决办法
5万
查看次数

JPA - @Column(unique = true) - 具有"独特"属性的真正意义何在?

假设我有'主题'表

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为检查.

它的真实用例是什么?

(我在这里假设,唯一约束也在数据库级别定义.)

java hibernate jpa

29
推荐指数
2
解决办法
3万
查看次数

"指定的密钥太长;最大密钥长度为1000字节"

我无法创建索引varchar(500).

MySQL的: Specified key was too long; max key length is 1000 bytes

mysql indexing

17
推荐指数
1
解决办法
1万
查看次数

如何修复MySql:索引列大小太大(Laravel migrate)

我复制了一个带有流浪盒的项目,它安装了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 indexing vagrant laravel-5

16
推荐指数
5
解决办法
3万
查看次数

MySQL错误:最大列大小为767字节

当我运行一个与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 database size innodb mysql-workbench

12
推荐指数
7
解决办法
5万
查看次数

有没有办法让整个MySQL行独一无二

我在MySQL中有一个包含30列和数千个条目的表.
有没有办法让每一行都是唯一的,这意味着如果一行已经存在,我就不能再次进入该行了.

我不能在这里使用主键或唯一键,因为每个列都可以重复.
我希望这行是唯一的.例如: - 有一个表格

columns->name,age,height,weight.
Run Code Online (Sandbox Code Playgroud)

在这一列中,我不能使任何一列或两列唯一,但我不应该有两个具有所有相同数据的条目.

mysql unique

10
推荐指数
3
解决办法
1万
查看次数

如何创建这个表?#1071 - 指定密钥太长; 最大密钥长度为1000字节

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字节

为什么我不能创建这个表?我应该更改什么来创建此表?

mysql

9
推荐指数
4
解决办法
7万
查看次数