相关疑难解决方法(0)

MySQL varchar索引长度

我有这样一张桌子:

CREATE TABLE `products` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(512) NOT NULL,
  `description` text,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

和这样的一个:

CREATE TABLE `product_variants` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(11) unsigned NOT NULL,
  `product_code` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `product_code` (`product_code`),
  KEY `product_variant_product_fk` (`product_id`),
  CONSTRAINT `product_variant_product_fk` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1037 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

和这样的SQL语句

SELECT p.id AS id, p.name AS name, p.description AS description, pv.id …
Run Code Online (Sandbox Code Playgroud)

mysql indexing varchar

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

将文本列设为唯一键

我想在MySQL服务器中使用mediumtext列作为表UNIQUE KEY

CREATE TABLE `parts` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` mediumtext NOT NULL,
      `display_status` int(11) NOT NULL,
       UNIQUE KEY `name` (`name`),
       PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

但这造成了错误

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

当我将`name`的类型更改为varchar时,它可以工作!

你能告诉我是否可以将文本列设为 UNIQUE KEY

mysql sql database unique-key

26
推荐指数
2
解决办法
4万
查看次数

无论如何使用mysql db后端在django中创建唯一的TextField?

我为多项选择问题创建了一个模型.每个问题都有5个答案选择.我需要每个问题对象根据它的问题和答案是唯一的.所以,我设计了这样的模型.

from django.db import models


class MultipleChoiceQuestion(models.Model):
    ANSWERS = [('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd'), ('e', 'e')]
    question = models.TextField()
    a = models.TextField()
    b = models.TextField()
    c = models.TextField()
    d = models.TextField()
    e = models.TextField()
    true_answer = models.CharField(max_length=1, choices=ANSWERS)

    class Meta:
        unique_together = [('question', 'a', 'b', 'c', 'd', 'e')]
Run Code Online (Sandbox Code Playgroud)

当我运行时migrate,mysql给出了这个错误:

1170,"没有密钥长度的密钥规范中使用的BLOB/TEXT列'问题'

我发现这里已经讨论过这个错误.但是,我不能使用 CharField它的小限制,因为我需要存储长文本(直到10000个字符或更多).

sqlite3和postgresql可以做到这一点(我的意思是django没有抱怨关键规范TEXT).

我需要使用mysql的原因是因为我将部署这个django应用程序的服务器只提供mysql,没有postgresql.

那么,无论如何我能做到这一点吗?

mysql django

9
推荐指数
1
解决办法
1230
查看次数

首先使用Entity Framework 4,MySQL和代码存储字节数组?

嘿,我正在尝试byte[]使用EF 4 MySQL(最新连接器)和代码优先方法存储一个简单的方法.

简单地做:

public byte[] Thumbnail {get; set;}
Run Code Online (Sandbox Code Playgroud)

在创建时给我以下错误:

您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法

然后它指出我的byte[]声明之后发生的事情.

有人给我任何快速提示吗?

c# mysql entity-framework ef-code-first

8
推荐指数
1
解决办法
6777
查看次数

使用主文本键创建MySQL表

我使用的命令CREATETABLE的是:

CREATE TABLE carts(order_id TEXT(14), items TEXT, shipping INT, price INT
Run Code Online (Sandbox Code Playgroud)

我想将'order_id'设置为我的主键.我试过ALTERTABLE:

ALTER TABLE `carts` ADD PRIMARY KEY(order_id)
Run Code Online (Sandbox Code Playgroud)

但是这会返回错误:

 #1170 - BLOB/TEXT column 'order_id' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)

我明白这意味着在初始设置中没有正确设置长度,所以我试过:

ALTER TABLE `carts` ADD PRIMARY KEY(order_id(14))
Run Code Online (Sandbox Code Playgroud)

哪个返回相同的错误.phpmyadmin中定义的类型是'tinytext'; 我期待着看到TEXT(14).

我正在通过PHP中的PDO执行所有这些命令.将'order_id'列设置为我TABLE的主键的正确方法是什么?

mysql

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

mysql/mariadb - 创建表列索引不起作用

所以我正在尝试按如下方式创建表:

CREATE TABLE company
  (
    id INT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name TEXT UNIQUE NOT NULL,

    INDEX(name(20))
  );
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它不起作用,因为我遵循这里的指南:https://dev.mysql.com/doc/refman/5.5/en/column-indexes.html

mysql mariadb

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

BLOB/TEXT列'值'在密钥规范中使用,没有密钥长度

我已经开发了一个在Magento上运行良好的扩展,直到1.6(我正在尝试Enterprise ed,我会认为社区有同样的问题,因为它有相同的代码).在我的安装脚本中,我正在打电话$installer->createEntityTables($this->getTable('alphanum/info'));.安装就好了,直到它出现在_text实体表中.它崩溃了!事实证明,当我记录sql并通过PHPmyadmin运行它时,这是错误:BLOB/TEXT column 'value' used in key specification without a key length.我查看了代码,这就是尝试在值列上生成索引:

->addIndex($this->getIdxName($eavTableName, array('attribute_id', 'value')),
     array('attribute_id', 'value'))
->addIndex($this->getIdxName($eavTableName, array('entity_type_id', 'value')),
     array('entity_type_id', 'value'))
Run Code Online (Sandbox Code Playgroud)

它没有任何if声明来确保它不是文本类型.有什么东西我错过了吗?我是否需要更改数据库配置?这可能是个错误吗?

我一直在if围绕它做一个声明(将其从父链中断开)以获得扩展.这应该很好.我查看了之前的rev(1.5.something),它没有那个索引.我只是无法弄清楚为什么它们在添加它时不会引起很多问题.让我想知道这是不是我的问题?

不知道这是否有助于包含Magento创建的SQL:

CREATE TABLE `alphanum_info_text` (
  `value_id` int NOT NULL auto_increment COMMENT 'Value Id',
  `entity_type_id` smallint UNSIGNED NOT NULL default '0' COMMENT 'Entity Type Id',
  `attribute_id` smallint UNSIGNED NOT NULL default '0' COMMENT 'Attribute Id',
  `store_id` smallint UNSIGNED NOT NULL default '0' COMMENT 'Store Id',
  `entity_id` int UNSIGNED NOT …
Run Code Online (Sandbox Code Playgroud)

mysql magento

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

MySQL唯一的列字符串

目前我在我的数据库中有这个表:

CREATE TABLE `twMCUserDB` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mc_userName` text NOT NULL,
  `mc_userPass` text NOT NULL,
  `tw_userName` text NOT NULL,
  `tw_userPass` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

我希望列mc_userName也是唯一的(就像id),但mc_userName必须是一个字符串.

我试图使它也成为主键,但这不起作用.

当我向表中添加数据时,首先要检查是否mc_userName已经存在?或者我可以使用MySQL中的任何内置函数(在插入查询中,还是在其他地方)?

mysql sql unique primary-key unique-key

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

MariaDB 不允许我使列变得唯一

我最近复制了一个现有的 MariaDB 表(用于 Amazon RDS)。这两个表基本上是相同的,包括数据,但我注意到新版本缺少所有唯一的约束(保持主键很好)。当我尝试添加回唯一值时,出现错误:

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

其他人也遇到过这个问题,并且人们声称MySQL/MariaDB 根本不允许您使文本列唯一。但我原来的 MariaDB 数据库(在我的本地计算机上)有大量带有唯一键的文本列,所以不可能是这样。无论如何,我尝试了他们的解决方案(切换到 varchar),但 MariaDB 也不让我这样做,因为我的数据有太多字符。有任何想法吗?非常感谢。

amazon-rds mariadb

4
推荐指数
1
解决办法
1699
查看次数

如何使用MySql后端为Django中的TextField指定索引?

我有一个在Django中定义的模型,看起来(部分)是这样的:

class Info(models.Model):
    information = models.TextField(max_length = 32, null = True, db_index = True)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试syncdb使用MySql后端时,我得到了Failed to install index for app.Info model: (1170, "BLOB/TEXT column 'information' used in key specification without a key length")

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

mysql django django-models

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

如何迁移变化列类型?

我得到一个错误,当我尝试列的类型从字符串文本,随着Laravel的迁移功能。

文件:{data_time} _change_db_structure.php

public function up()
  {
    Schema::table('service_request_type', function (Blueprint $table) {
      $table->dropIndex(['sro_key_group']);

      $table->text('sro_key_group')->change();
      $table->renameColumn('sro_key_group', 'tags');
    });
  }
Run Code Online (Sandbox Code Playgroud)

这是原单迁移创建表文件。

public function up()
  {
    Schema::create('service_request_type', function (Blueprint $table) {
      $table->engine = 'InnoDB';
      ...
      $table->string('sro_key_group', 100)->nullable()->index();
      ...
    });
  }
Run Code Online (Sandbox Code Playgroud)

我弄错了。

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column 'sro_key_group' used in key specification without a key length (SQL: ALTER TABLE service_request_type CHANGE sro_key_group sro _key_group TEXT DEFAULT NULL COLLATE utf8_unicode_ci)

                                                                                                                                          [Doctrine\DBAL\Driver\PDOException]                                   
Run Code Online (Sandbox Code Playgroud)

SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column …

dbal laravel laravel-5 laravel-5.4

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