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è)定的范圍。

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

????在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è)定值的大小。

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

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

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

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


注:對于5.0版本以上的MySQL,varchar數(shù)據(jù)類型的存儲上限已經(jīng)更改為65535字節(jié)。
????最后成功導(dǎo)入。

注:雖然設(shè)定text數(shù)據(jù)類型解決了大文本的存儲問題,但也降低了查詢速度,故在條件允許的情況下優(yōu)先使用varchar數(shù)據(jù)類型。
如果這篇文章對您有幫助的話,麻煩點個贊再走吧~