SQL-[ERR]1406,[ERR]1118報錯解析及解決方法

1.[ERR]1406報錯解析

????通過Navicat Premium將Excel文件導(dǎo)入MySQL數(shù)據(jù)庫時出現(xiàn)報錯“[ERR]1406 – Data too long for column ‘AB’ at row 1”。意思是導(dǎo)入的數(shù)據(jù)過長,超出了數(shù)據(jù)庫為其設(shè)定的范圍。

圖1 報錯界面—[ERR]1406

????查看Excel中‘AB’字段報錯的那一條記錄發(fā)現(xiàn)數(shù)據(jù)長度為808字符。

圖2 ‘AB’列Excel數(shù)據(jù)

????在Navicat中點擊“上一步”返回至數(shù)據(jù)空間設(shè)定界面,發(fā)現(xiàn)在數(shù)據(jù)導(dǎo)入時Navicat默認(rèn)將數(shù)據(jù)空間設(shè)定為varchar類型數(shù)據(jù),長度為255字節(jié)。記錄的數(shù)據(jù)長度確實超出了設(shè)定值的大小。

圖3 數(shù)據(jù)空間設(shè)定界面默認(rèn)狀態(tài)

2.[ERR]1118報錯解析

????修改varchar數(shù)據(jù)類型的長度,使其滿足需求,結(jié)果出現(xiàn)報錯[ERR]1118-Cannot create table,varchar類型數(shù)據(jù)長度不得超過了65535字節(jié)。

圖4 報錯界面—[ERR]1118

????查閱資料得,varchar 保存時用一個字節(jié)或兩個字節(jié)長的前綴+數(shù)據(jù)。故varchar 的最大長度應(yīng)為65532=65535-1-2(字節(jié)),utf-8下為21844=65532/3(字符)。如圖5所示,varchar類型數(shù)據(jù)設(shè)定21845字符保存時報錯。

圖5 單字段報錯界面

????值得注意的是,當(dāng)全字段varchar數(shù)據(jù)的長度超過21844字符(utf-8下)時仍會報錯,所以varchar的字符限制是對全字段而言的!

圖6 全字段報錯界面

3.解決方法

????故對于大文本數(shù)據(jù),解決方法是將部分字段的數(shù)據(jù)類型從varchar調(diào)整為text,如果數(shù)據(jù)超過了64K則可以選擇存儲空間更大的數(shù)據(jù)類型longtext或者midiumtext,具體可參考圖8。

圖7 調(diào)整部分字段的數(shù)據(jù)類型
圖8 串?dāng)?shù)據(jù)類型

注:對于5.0版本以上的MySQL,varchar數(shù)據(jù)類型的存儲上限已經(jīng)更改為65535字節(jié)。

????最后成功導(dǎo)入。

圖9 數(shù)據(jù)成功導(dǎo)入界面

注:雖然設(shè)定text數(shù)據(jù)類型解決了大文本的存儲問題,但也降低了查詢速度,故在條件允許的情況下優(yōu)先使用varchar數(shù)據(jù)類型。


如果這篇文章對您有幫助的話,麻煩點個贊再走吧~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容