沒有外貿(mào)網(wǎng)站 如果做外貿(mào)全網(wǎng)營(yíng)銷推廣系統(tǒng)
MySQL字段設(shè)置的varchar長(zhǎng)度小于數(shù)據(jù)長(zhǎng)度自動(dòng)截取丟棄超出的長(zhǎng)度而不是報(bào)錯(cuò)?
事情是這樣的,我們一個(gè)訂單表存放了商品的快照信息其中快照信息存儲(chǔ)的是json格式商品信息,當(dāng)查看訂單是報(bào)錯(cuò)了,發(fā)現(xiàn)我們后端服務(wù)查詢到訂單的快照信息進(jìn)行json轉(zhuǎn)Java實(shí)體時(shí)報(bào)錯(cuò)了,是因?yàn)閖son格式錯(cuò)誤,后竟發(fā)現(xiàn)json格式并不完整,而該字段存儲(chǔ)的字符串正好是設(shè)置的大小VARCHAR(4000) DEFAULT NULL
。
原來在數(shù)據(jù)庫中,當(dāng)數(shù)據(jù)長(zhǎng)度超出字段設(shè)置的 VARCHAR 長(zhǎng)度時(shí),行為會(huì)取決于具體的數(shù)據(jù)庫系統(tǒng)和其配置。在MySQL中,這個(gè)行為受到 SQL模式(sql_mode) 的控制。
不嚴(yán)格模式 (默認(rèn)):
在默認(rèn)情況下,或者在非嚴(yán)格模式(NO_STRICT)下,當(dāng)插入長(zhǎng)度超出 VARCHAR 字段定義的字符串時(shí),MySQL會(huì)自動(dòng)截?cái)喑龅牟糠?#xff0c;并發(fā)出一個(gè)警告,而不是錯(cuò)誤。這種行為允許操作繼續(xù)執(zhí)行,但不保證數(shù)據(jù)完整性。
嚴(yán)格模式(STRICT 模式)
當(dāng)MySQL數(shù)據(jù)庫設(shè)置為 嚴(yán)格模式(STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES) 時(shí),如果嘗試插入或更新超過設(shè)定長(zhǎng)度的數(shù)據(jù),將會(huì)導(dǎo)致錯(cuò)誤,并阻止該事務(wù)進(jìn)行。這保證了數(shù)據(jù)的完整性,因?yàn)椴辉试S存儲(chǔ)部分?jǐn)?shù)據(jù)。