我有这样一张桌子:
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
服务器中使用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
我为多项选择问题创建了一个模型.每个问题都有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.
那么,无论如何我能做到这一点吗?
嘿,我正在尝试byte[]
使用EF 4 MySQL(最新连接器)和代码优先方法存储一个简单的方法.
简单地做:
public byte[] Thumbnail {get; set;}
Run Code Online (Sandbox Code Playgroud)
在创建时给我以下错误:
您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法
然后它指出我的byte[]
声明之后发生的事情.
有人给我任何快速提示吗?
我使用的命令CREATE
我TABLE
的是:
CREATE TABLE carts(order_id TEXT(14), items TEXT, shipping INT, price INT
Run Code Online (Sandbox Code Playgroud)
我想将'order_id'设置为我的主键.我试过ALTER
了TABLE
:
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
的主键的正确方法是什么?
所以我正在尝试按如下方式创建表:
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
我已经开发了一个在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) 目前我在我的数据库中有这个表:
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中的任何内置函数(在插入查询中,还是在其他地方)?
我最近复制了一个现有的 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 也不让我这样做,因为我的数据有太多字符。有任何想法吗?非常感谢。
我有一个在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")
我怎样才能解决这个问题?
我得到一个错误,当我尝试列的类型从字符串文本,随着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)Run Code Online (Sandbox Code Playgroud)[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column …
mysql ×9
django ×2
mariadb ×2
sql ×2
unique-key ×2
amazon-rds ×1
c# ×1
database ×1
dbal ×1
indexing ×1
laravel ×1
laravel-5 ×1
laravel-5.4 ×1
magento ×1
primary-key ×1
unique ×1
varchar ×1