Java 创建数据库的SQL抛出';MySQLSyntaxErrorException:指定的键太长;最大密钥长度为767字节';
当我尝试使用以下语句创建数据库时Java 创建数据库的SQL抛出';MySQLSyntaxErrorException:指定的键太长;最大密钥长度为767字节';,java,mysql,sql,Java,Mysql,Sql,当我尝试使用以下语句创建数据库时 c.prepareStatement("CREATE TABLE IF NOT EXISTS `verify` (" + "`id` INT NOT NULL AUTO_INCREMENT UNIQUE," + "`uuid` VARCHAR(255) NOT NULL UNIQUE," +
c.prepareStatement("CREATE TABLE IF NOT EXISTS `verify` (" +
"`id` INT NOT NULL AUTO_INCREMENT UNIQUE," +
"`uuid` VARCHAR(255) NOT NULL UNIQUE," +
"`ts` INT NOT NULL UNIQUE," +
"PRIMARY KEY (`id`)" +
");").execute();
我得到这个错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:指定的密钥太长;最大键长度为767字节
您希望uuid
是唯一的,但对于字符串列:
可以创建只使用列的前导部分的索引
值,使用col_name(length)语法指定索引前缀
长度
及
前缀支持和前缀长度(如果支持)是存储
取决于发动机。例如,前缀的长度可达767字节
对于使用冗余或紧凑行格式的InnoDB表。这个
对于使用
动态或压缩行格式。对于MyISAM表,前缀长度
限制为1000字节
因此,您可以在不使用此索引的情况下创建表,然后设置索引以获取列的子集:
ALTER TABLE `verify` ADD UNIQUE ( uuid(191) );
as767/4~=191