mysql 类型 自动转化_自动MySQL数据类型转换
我剛剛碰到一個有趣的案例,在MySQL中進行數據類型轉換.考慮以下查詢:
SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col=123; #Yields 0 rows
SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="123"; #Yields 0 rows
SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="0"; #Yields 1 row, col=0
SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="abc"; #Yields 1 row, col=0
第1、2和3行對我來說似乎很合邏輯.但是在第4行上,為什么親愛的SQL哦,為什么呢?您急切地將“ abc”強制轉換為等于0嗎?
我的意思是,我明白了-“ abc”不是整數,所以0才最有意義…在這種情況下,這種行為實際上有用嗎?據我所知,它可能會導致錯誤(就像在我們的應用程序中一樣)…
也許有一個MySQL“模式”可以為這樣的自動類型轉換啟用警告?
解決方法:
MySQL在數字上下文中對字符串進行隱式類型轉換.字符串的前導數字字符將轉換為數字,因此諸如“ abc”之類的字符串將轉換為0.
這可能非常方便,因為此轉換不會導致錯誤(顯式轉換會導致錯誤).
道理很簡單:將常量與列進行比較時,使列與列具有相同的類型.也就是說,請勿比較字符串和數字,以免發生意外情況.
標簽:casting,sql,mysql
來源: https://codeday.me/bug/20191119/2037998.html
總結
以上是生活随笔為你收集整理的mysql 类型 自动转化_自动MySQL数据类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核多大 4.17.8,Lin
- 下一篇: linux cmake编译源码,linu