--- tags: MySQL --- # MySQL 資料型態不正確時會發生什麼事 這篇文章是在寫 Week9 hw2 時所發想的,我在寫 hw2 第一題時就被問倒了 XD, 所以想研究一下幾個常見的資料型態,看看輸入不正確的資料型態會發生什麼事。 ## 大多數共通行為 存不對的資料型態:超過上限、整數存小數、數字存字串… MySQL 未必會自動擋下語法, 而是會以他的上限或是其他數值來代替,所以我們必須在前端或後端過濾使用者輸入, 避免輸入錯誤的資料。 ## INT 可接受範圍為 -2147483648 to 2147483647 的整數。 如果輸入超過範圍的 "正數",例如:214748364999, 資料庫會存 2147483647。 反之輸入超過範圍的 "負數" ,例如:-214748364999, 資料庫會存 -2147483648,非常神奇。 如果在 INT 底下輸入浮點數會發生什麼事呢? 答:會四捨五入,輸入 0.49 會被調成 0;輸入 0.5 會被調成 1。 如果在 INT 底下輸入英文會發生什麼事呢? 答:會存入 0 這個數字。 如果在 INT 底下輸入中文會發生什麼事呢? 答:SQL 語法錯誤,無法輸入。 如果在 INT 底下輸入特殊字元(<>?!@#%~^&)會發生什麼事呢? 答:SQL 語法錯誤,無法輸入。 ## VARCHAR(字元長度) 最大長度 255 bytes,照理說應該只能存到 255 個字,但如果在資料庫設定 VARCHER(1000), 也是可以存 1000 個字去 XD,超過會強制砍到上限 查了一下[資料](https://www.itread01.com/articles/1476105016.html),似乎在 MySQL5.0 以上的版本可以存到 65535 個字節,所以 VARCHER(1000) 沒毛病兒~可以存。 那如果設定 VARCHAR(70000) 會發生什麼事? 答:直接進化成 MEDIUMTEXT,非常感動,有種小火龍進化成火恐龍的感覺。如果設定 VARCHAR(10000000) 會變成 LONGTEXT,小火龍直接變成噴火龍。 ## DATE 日期,格式為 0000-00-00,輸入英文/中文/符號會語法錯誤,格式正確但數字很奇怪會變成 0000-00-00, 例如:2020-08-100,2020 年 8 月 100 號,會變成 0000-00-00。 輸入假的閏年:也會變成 0000-00-00,例如:2019-02-29,2019 年 2 月 29 號,系統背後應該是有一套日曆,不過上限只到 9999-12-31,所以人類到西元 10000 年 1 月 1 號時 MySQL 會爆炸。 以上是幾個這次作業可能會用到的資料型態,親自去玩壞系統有助於了解資料庫,知道它大概會有哪些行為後也比較不會害怕後端的東西~
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up