mysql error 1071: 創(chuàng)建唯一索引時(shí)字段長(zhǎng)度限制的問(wèn)題
一、先描述一下問(wèn)題吧
如下創(chuàng)建表時(shí)候報(bào)錯(cuò)了
CREATE TABLE `xxx` ( ? `id` bigint(20) NOT NULL AUTO_INCREMENT, ? `sys_code` varchar(255) DEFAULT NULL COMMENT '系統(tǒng)編碼', ? `module_name` varchar(1000) DEFAULT NULL COMMENT '模塊名', ? `call_num` bigint(20) DEFAULT NULL COMMENT '調(diào)用次數(shù)', ? `cost_dis` varchar(50) DEFAULT NULL COMMENT '耗時(shí)分布', ? `date_time` varchar(50) DEFAULT NULL COMMENT '日期時(shí)間', ? PRIMARY KEY (`id`), ? UNIQUE KEY `sys_code` (`sys_code`, `module_name`, `cost_dis`, `date_time`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 > 1071 - Specified key was too long; max key length is 3072 bytes > 時(shí)間: 0s
二、顯而易見(jiàn)
提示就是長(zhǎng)度太長(zhǎng)超過(guò)了mysql的最大配置。
三、問(wèn)題和解決方案分析
1、首先考慮是否有方法將mysql這個(gè)長(zhǎng)度限制調(diào)大
查了一下,如下操作:
(1)set global innodb_large_prefix=1;
mysql> show variables like 'innodb_large_prefix'; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +---------------------+-------+ | Variable_name ? ? ? | Value | +---------------------+-------+ | innodb_large_prefix | ON ? ?| +---------------------+-------+ 1 row in set (0.00 sec)
(2)set global innodb_file_format=BARRACUDA;
mysql> show variables like 'innodb_file_format'; ? +--------------------+-----------+ | Variable_name ? ? ?| Value ? ? | +--------------------+-----------+ | innodb_file_format | Barracuda | +--------------------+-----------+ 1 row in set (0.00 sec)
如果已經(jīng)設(shè)置,還是創(chuàng)建不成功,只能考慮方案二
2、一般來(lái)說(shuō),唯一索引長(zhǎng)度不應(yīng)該太長(zhǎng)
因?yàn)閙ysql會(huì)根據(jù)這個(gè)唯一索引做了一系列的操作,所以
(1)重新審核需求看看這樣的唯一索引是否合理,看看能不能減少字段
(2)實(shí)在是不行,只能根據(jù)具體情況,將字段的長(zhǎng)度調(diào)整小
比如,上面的例子就是沒(méi)辦法減少字段的,但是我又一定要建立唯一索引,最終,我選擇了調(diào)整字段長(zhǎng)度,將module_name的長(zhǎng)度減少到了255,再次創(chuàng)建表,已成功。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySQL創(chuàng)建索引/判斷索引是否生效的問(wèn)題
- Mysql創(chuàng)建json字段索引的兩種方式
- mysql創(chuàng)建索引的3種方法實(shí)例
- MySQL創(chuàng)建唯一索引時(shí)報(bào)錯(cuò)Duplicate?entry?*?for?key問(wèn)題
- MySQL為JSON字段創(chuàng)建索引方式(Multi-Valued?Indexes?多值索引)
- MySql索引和索引創(chuàng)建策略
- 一文弄懂MySQL索引創(chuàng)建原則
- MySQL創(chuàng)建高性能索引的全步驟
- MySQL不適合創(chuàng)建索引的11種情況示例分析
相關(guān)文章
mysql8關(guān)閉binlog并清空Binlog的方法
這篇文章主要介紹了mysql8關(guān)閉binlog并清空Binlog,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09MYSQL突破secure_file_priv寫(xiě)shell問(wèn)題
這篇文章主要介紹了MYSQL突破secure_file_priv寫(xiě)shell問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01關(guān)于 MySQL 嵌套子查詢中無(wú)法關(guān)聯(lián)主表字段問(wèn)題的解決方法
這篇文章主要介紹了關(guān)于 MySQL 嵌套子查詢中,無(wú)法關(guān)聯(lián)主表字段問(wèn)題的折中解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12mysql數(shù)據(jù)庫(kù)decimal類(lèi)型與decimal長(zhǎng)度用法詳解
在MySQL中decimal是一種用于存儲(chǔ)精確數(shù)字的數(shù)據(jù)類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)decimal類(lèi)型與decimal長(zhǎng)度用法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Mysql數(shù)據(jù)庫(kù)之Binlog日志使用總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇Mysql數(shù)據(jù)庫(kù)之Binlog日志使用總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03mysql搭建主從復(fù)制的實(shí)現(xiàn)步驟
在MySQL集群中,主庫(kù)更新會(huì)同步到從庫(kù),但從庫(kù)更新不同步到主庫(kù),主從復(fù)制能分?jǐn)倝毫?本文就來(lái)介紹一下mysql搭建主從復(fù)制的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-11-11