关于“mysql specified key was too long”解决方法

1.问题描述:

在执行

create table goodsAndProps
(
   goodsId              varchar(128) not null,
   propsId              varchar(128) not null,
   propsValue           varchar(128) not null,
   primary key (goodsId, propsId, propsValue)
);

时候发生的,三个字段做主键占用的长度已经超出了1000的限制((200 + 200 +200) * 2 = 1200 > 1000),如果是两个字段做主键就不会有问题。

2.解决方案:

需要使用INNODB,新一点的mysql版本都是支持INNODB数据引擎的,不需要特别的开启。特别是在5.5版本以后,默认就是InnoDB。这里发生问题就是我们的mysql版本有点老了,是5.1.47的版本,

[[email protected] etc]# mysql --version
mysql  Ver 14.14 Distrib 5.1.47, for redhat-linux-gnu (x86_64) using readline 5.1

因此需要在 /etc/my.cnf 文件中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。

修改完毕的my.cnf如下,

[[email protected] etc]# cat my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default-storage-engine=INNODB
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

重启mysql即可,不再会出现描述的问题。

时间: 2024-07-30 08:15:52

关于“mysql specified key was too long”解决方法的相关文章

关于php读mysql数据库时出现乱码的解决方法

关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )DEFAULT CHARSET =UTF8; 复制代码 2. mysql的字符集 mysql中有三个重要的变量,character_set_

Mysql的“Table 'mysql.servers' doesn't exist”的解决方法

安装MYSQL后,又一次系统出现问题了,于是我查看mysql的错误日志,竟发现Table 'mysql.servers' doesn't exist问题的错误, 虽然与我的问题无关,但这个问题还是引起我的注意. 分析看是缺少mysql.servers这个表. 后上网寻找解决办法,发现解决这个问题有两个方法: 解决方法一,自己建立这张表. use mysql;CREATE TABLE `servers` (`Server_name` char(64) NOT NULL,`Host` char(64

centos里mysql无法用localhost连接的解决方法

遇到这个问题可能是由于我未安装在默认路径导致的 解决方法: 由于mysql 默认的mysql.sock 是在/var/lib/mysql/mysql.sock,但linux系统总是去/tmp/mysql.sock查找,所以会报错 [[email protected] ~]# find / -name mysql.sock/var/lib/mysql/mysql.sock 1.直接指定mysql通道 [[email protected] ~]# mysql --socket=/var/lib/my

Adobe Dreamweaver CC MySQL连接 报404错误的解决方法

Adobe Dreamweaver CC MySQL连接时总报404报错,并给以下两个提示: 1) 在该服务器机器上没有测试服务器运行. 2) 为该站点指定的测试服务器没有映射到http://localhost/_mmServerScripts/MMHTTPDB.phpURL.请确认url前缀映射到了你站点的根上. 网上翻了一堆网站,折腾了两三天,发现可以按如下方法解决: 1)首先要在http://localhost/security/index.php配置mysql的访问密码(我用的是XAMP

LIGHTSWITCH 连接 MYSQL,中文字符不能保存----解决方法。

使用:dotConnect for MySQL () 作为 数据库连接的PROVIDER ,  在 LIGHTSWITCH 中 引用外部的MYSQL 数据源. http://www.devart.com/dotconnect/mysql/      也有  postgre LS 项目没有使用:中文 ,而是使用 EN  产生?  后来修改了.只是 没有进一步测试. LIGHTSWITCH 连接 MYSQL,中文字符输入时,出现不能保存. 1) 检查 MYSQL 数据库及表.字段定义 ,都是:UTF

[转]mysql导入导出数据中文乱码解决方法小结

本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 代码如下: mys

mysql执行show processlist unauthenticated user 解决方法

一台unibilling机器前几天突然负载变重. 在top中发现cpu被大量占用. agi程序运行的很慢,并出现僵尸进程. 其实当时只有50个左右的并发呼叫. 远远达不到正常水准. 重新启动机器问题也没得到解决. 非常奇怪. 考虑到在top中看到mysqld占用的资源最多,就进入mysql控制台,运行 show processlist命令, 发现某进程的信息很特殊:  代码如下 复制代码 User "unauthenticated user" Command "connect

The following signatures couldn't be verified because the public key is not available 解决方法

今天试图把 deepin 的软件源加到我到 Ubuntu 16.04 中去. 在 deepin wiki 上看到一个教程. 在 /etc/apt/sources.list 中加上 deepin 的软件源之后,执行 sudo apt update 报错: Err:3 http://packages.deepin.com/deepin unstable InRelease The following signatures couldn't be verified because the public

MySQL的TIME_WAIT连接过多的解决方法

今天上MySQL服务器看了下并发,发现了以下情况 MySQL的TIME_WAIT连接过多,吓了我一跳,因为这个服务器我很少去管理,今天突然想上来看看,发现了这个问题.以下是我的解决方法 [[email protected] data]# ss -an | grep 3306 | wc -l 1402[[email protected] data]#mysql -uroot -p mysql> show variables like "time_timeout"; | wait_t