标签: mysql-error-1170

MySQL错误:没有密钥长度的密钥规范

我有一个主键是一个varchar(255)的表.出现了一些情况,其中255个字符是不够的.我尝试将字段更改为文本,但是我收到以下错误:

BLOB/TEXT column 'message_id' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

编辑:我还应该指出这个表有一个包含多列的复合主键.

mysql sql mysql-error-1170

335
推荐指数
7
解决办法
34万
查看次数

带有Rails 2.3.2的MySQL全文索引(迁移问题)

我在Rails 2.3.2应用程序中使用MySQL全文索引.我在迁移中通过本机SQL添加了索引.但是有一个已知问题导致schema.rb出现问题.Rails不了解全文索引并尝试创建普通索引.从schema.rb创建数据库时会出错(例如测试,规格等):

Mysql::Error: BLOB/TEXT column 'text' used in key specification without a key length: CREATE  INDEX `fulltext_sms` ON `sms` (`text`)
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有猴子修补Rails的情况下在Rails 2.3.2中解决这个问题?如果没有,最好的方法是什么?

谢谢!

我的迁移:

class FulltextIndexCustomersSmsMessage < ActiveRecord::Migration
  def self.up
    execute('ALTER TABLE sms ENGINE = MyISAM')
    execute('ALTER TABLE customers ENGINE = MyISAM')
    execute('CREATE FULLTEXT INDEX fulltext_sms ON sms (text(500))')
    execute('CREATE FULLTEXT INDEX fulltext_customer ON customers (fullname(255))')
  end

  def self.down
    execute('ALTER TABLE sms ENGINE = innodb')
    execute('ALTER TABLE customers ENGINE = innodb')
    execute('DROP INDEX fulltext_sms ON sms')
    execute('DROP INDEX fulltext_customer ON …
Run Code Online (Sandbox Code Playgroud)

mysql sql ruby-on-rails mysql-error-1170

7
推荐指数
2
解决办法
3687
查看次数

@IdClass与非主要@Id

我正在尝试将复合主键添加到类中并遇到一些麻烦.这是课程.

class User {
    private long id;
    ...
}

class Token {
    private User user;
    private String series;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在使用orm.xml来映射类,因为它们实际上是我不想依赖JPA的更高级API的一部分 - 它有许多实现.

这里是:

...
<entity class="User">
    <attributes>
        <id name="id">
            <generated-value strategy="AUTO"/>
        </id>
        ...
    </attributes>
</entity>

<entity class="Token">
    <id-class class="TokenPK"/>
    <attributes>
        <id name="series"/>
        <id name="user"/>
        <many-to-one name="user"/>
    </attributes>
</entity>
Run Code Online (Sandbox Code Playgroud)

最后为了使它全部工作,我创建了TokenPK类,它看起来像这样:

public class TokenPK implements Serializable {

    private String series;
    private User user;

    public TokenPK() {
    }

    public TokenPK(String series, User user) {
        this.series = series;
        this.user = user;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate jpa mysql-error-1170

6
推荐指数
1
解决办法
2819
查看次数

映射@Lob值映射

这是我的模型的一部分:

@Entity
public class Entry
{
    @Id @GeneratedValue
    private long identifier;

    @ElementCollection
    @Column(nullable = false)
    private Map<String, String> titles;

    @ElementCollection
    @Column(nullable = false)
    @Lob
    private Map<String, String> contents;

    // Getters and setters, other fields and methods
}
Run Code Online (Sandbox Code Playgroud)

我使用@Lob注释,因为map"contents"的值可能很大.请注意,我不关心映射"contents"的键如何映射到数据库.我只是找不到一种方法来指定@Lob注释应该只应用于地图的值.

虽然Entry.titles没有问题地映射到数据库,但Entry.contents却没有.没有创建数据库表,MySQL/Hibernate抱怨:

Unsuccessful: create table myblog.Entry_contents (Entry_identifier bigint not null, contents longtext not null, contents_KEY longtext, primary key (Entry_identifier, contents_KEY)) type=InnoDB
BLOB/TEXT column 'contents_KEY' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)

任何想法都表示赞赏!

mysql annotations hibernate jpa mysql-error-1170

6
推荐指数
1
解决办法
2654
查看次数

MySQL:如何将varchar(255)UNIQUE列更改为UNIQUE Text NOT NULL?

当前列是VARCHAR(255)NOT NULL,那么如何将其更改为TEXT NOT NULL?

注意:要更改其属性类型的列是另一列的UNIQUE KEY组合.例如

独特的钥匙(名称,描述)

列描述当前在varchar(255)中.由于这个原因,它无法改变:

错误1170(42000):BLOB/TEXT列'描述'在密钥规范中使用,没有密钥长度

我需要它是TEXT,否则我需要重新创建整个事情?我已经收到了一些繁琐而重要的数据.重新创建会很麻烦.

mysql sql mysql-error-1170

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

标签 统计

mysql-error-1170 ×5

mysql ×4

sql ×3

hibernate ×2

jpa ×2

annotations ×1

java ×1

orm ×1

ruby-on-rails ×1