mysql 无法处理非法数据_MySQL 处理非法数据
默認情況下,MySQL按照以下規則處理“數據越界”和其他非正常數據
1、對于數值數據或time數據列,超出合法范圍的值將被階段到最近的取值范圍邊界;
2、對于字符串數據列(不包括enum、set)太長的字符串將被截斷到數據列的最大長度,對于
ENUM類型數據,MySQL將不合法成員用空字符串代替。如果賦值給某個set數據列包含非法子字符串,那mysql會刪除那些子字符串并把剩下的賦值給該數據列
3、對于日期和時間數據列,非法數值會被轉換成‘0’值替代
當發生上述情況的時候,MySQL會生成警告, 可使用 show warnings 查看。
4、對于字符串序列,太長的字符串將被截短到數據列的最大長度
如果需要在插入或更新數據時進行更嚴格的檢查,可以啟用特殊的SQL MODE;
sql_mode='strict_all_tables,strict_trans_tables'
對于支持事務的表,這兩種模式是一樣的:如果發現某個值缺失或非法,MySQL將拋出錯誤,語句會停止運行并回滾。
對于不支持事務的表,這兩種模式的效果:
1、如果在插入或修第一個數據行時就發現某個值非法或缺失,那該語句直接拋錯,語句停止執行。這個和支持事務的數據表行為時一樣的。
2、如果在插入或修改第n個(n>1)數據行時才發現錯誤,那就會出現下面的情況:
2.1 在strict_all_tables模式下,停止語句執行,存在部分更新的問題
2.2 在strict_trans_tables模式下,MySQL將繼續執行該語句避免“部分更新問題”,對每個非法值將其轉換為最接近的合法值。
配合嚴格模式的其他幾個SQL模式:
ERROR_FOR_DIVISION_BY_ZERO: 在嚴格模式下,遇到以0為除數的情況,拒絕插入數據庫,(如果不在嚴格模式下,MYSQL將生成一條告警,并插入NULL值)
NO_ZERO_DATE:在嚴格模式下,拒絕0日期值進入數據庫。
建議采用:strict_trans_tables ERROR_FOR_DIVISION_BY_ZERO
制止錯誤的另一個辦法是在insert或update語句里使用IGNORE關鍵字,使非法值而導致的錯誤弱化為一個警告。
?著作權歸作者所有:來自51CTO博客作者位鵬飛的原創作品,如需轉載,請注明出處,否則將追究法律責任
MySQL錯誤處理非法數據庫
總結
以上是生活随笔為你收集整理的mysql 无法处理非法数据_MySQL 处理非法数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python开发的著名软件公司_软件开发
- 下一篇: 求m ,n 两个数的最小公倍数