mysql 类型 自动转化_自动MySQL数据类型转换
我剛剛碰到一個(gè)有趣的案例,在MySQL中進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換.考慮以下查詢:
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行對(duì)我來說似乎很合邏輯.但是在第4行上,為什么親愛的SQL哦,為什么呢?您急切地將“ abc”強(qiáng)制轉(zhuǎn)換為等于0嗎?
我的意思是,我明白了-“ abc”不是整數(shù),所以0才最有意義…在這種情況下,這種行為實(shí)際上有用嗎?據(jù)我所知,它可能會(huì)導(dǎo)致錯(cuò)誤(就像在我們的應(yīng)用程序中一樣)…
也許有一個(gè)MySQL“模式”可以為這樣的自動(dòng)類型轉(zhuǎn)換啟用警告?
解決方法:
MySQL在數(shù)字上下文中對(duì)字符串進(jìn)行隱式類型轉(zhuǎn)換.字符串的前導(dǎo)數(shù)字字符將轉(zhuǎn)換為數(shù)字,因此諸如“ abc”之類的字符串將轉(zhuǎn)換為0.
這可能非常方便,因?yàn)榇宿D(zhuǎn)換不會(huì)導(dǎo)致錯(cuò)誤(顯式轉(zhuǎn)換會(huì)導(dǎo)致錯(cuò)誤).
道理很簡(jiǎn)單:將常量與列進(jìn)行比較時(shí),使列與列具有相同的類型.也就是說,請(qǐng)勿比較字符串和數(shù)字,以免發(fā)生意外情況.
標(biāo)簽:casting,sql,mysql
來源: https://codeday.me/bug/20191119/2037998.html
總結(jié)
以上是生活随笔為你收集整理的mysql 类型 自动转化_自动MySQL数据类型转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核多大 4.17.8,Lin
- 下一篇: mysql 线性表_数据结构-线性表之顺