mysql字段長度的問題


先看下面兩張圖:






這說明了不管庫編碼是UTF-8 還是 GBK,對varchar字符長度的控制是忽略字節的概念的,

不論是中文字符還是英文字符,都會計爲1的長度。



另外,我發現了另外一個問題,mysql有自身潛規則的容錯機制,如下:


我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我


這串字符爲256個“我”字組成


如果你在update表中某一個字段,而某一個字段的長度剛好是256時,會存在如下情況:

情況1:在上述字符串後端加上一個字符,如下:



(1)先查詢一下字符長度,爲257個字符,因爲尾巴後面多了一個1;

select DISTINCT CHAR_LENGTH('我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我1') FROM quality_check_grade_history;

(2)然後,我們進行update操作;

update quality_check_grade_history t set t.appeal_remark='我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我1' where t.id=775;

         執行結果如下:

[SQL] 
         update quality_check_grade_history t set t.appeal_remark='我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我            我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我             我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我             我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我1' where t.id=775;
         受影響的行: 0
         時間: 0.002s


(3)我們在換一種方式,將1加在256個我字的前面,或者中間;

反而執行成功了,執行結果如下:

[SQL] 
update quality_check_grade_history t set t.appeal_remark='1我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我' where t.id=775;
受影響的行: 1
時間: 0.002s


[SQL] 
update quality_check_grade_history t set t.appeal_remark='我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我1我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我' where t.id=775;
受影響的行: 1
時間: 0.007s


(4)最後我們將執行成功的字段中的數據拿出來,看一下字符長度:

select DISTINCT CHAR_LENGTH('我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我1我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我') FROM quality_check_grade_history;

執行結果如下:




因此最後的結論是, mysql有自己的容錯機制,他的機制的潛規則是:
1. 比較上次與本次的字符串是否有區別;
2. 比較區別是否在末端發生變化,還是在非末端(前端或中間)發生變化;
3. 如果是在末端發生變化,則執行失敗;
4. 如果在前端或中間發生變化,則執行成功,並且截取字符,截取的字符是末端的字符,保證整個長度合法。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章