一、postgreSQL is not null 和 !=NULL的區(qū)別
按照sql標(biāo)準(zhǔn)來說 = null這種語(yǔ)法本來就是錯(cuò)誤的,在oracle postgresql mssql等企業(yè)級(jí)數(shù)據(jù)庫(kù)中這種語(yǔ)法根本就不支持。
判斷是否為null的標(biāo)準(zhǔn)sql規(guī)范是is null 和is not null。
sql是個(gè)“公共”的數(shù)據(jù)庫(kù)查詢語(yǔ)言有他自己的標(biāo)準(zhǔn)。mysql postgresql mssql oracle等都不同程度的遵循不同的sql標(biāo)準(zhǔn)并且各自都又在自家產(chǎn)品中加入了他自己的特色。
postgresql默認(rèn)不支持 = null這種語(yǔ)法,但是在配置文件中可以設(shè)置開啟支持,會(huì)自動(dòng)的把=null轉(zhuǎn)換成is null,!=null自動(dòng)轉(zhuǎn)換成is not null
null就是null,null不等于空字符串。
默認(rèn)情況下做比較條件時(shí)使用關(guān)鍵字“is null”和“is not null”。
如果你一定要使用!= null來進(jìn)行條件判斷,需要加上這個(gè)命令語(yǔ)句:SET ANSI_NULLS OFF,這時(shí)數(shù)據(jù)庫(kù)進(jìn)入ANSI SQL非標(biāo)準(zhǔn)模式,你會(huì)發(fā)現(xiàn)IS NOT NULL 和 != null 是等效的了。
這里使用的是模式切換命令SET ANSI_NULLS[ON/OFF]。ON值采用ANSI SQL嚴(yán)格標(biāo)準(zhǔn),OFF值采用非標(biāo)準(zhǔn)兼容模式。另外SET ANSI_DEFAULTS [ON/OFF]命令也可以實(shí)現(xiàn)標(biāo)準(zhǔn)的切換,只是這個(gè)命令控制的是一組符合SQL-92標(biāo)準(zhǔn)的設(shè)置,其中就包括Null值的標(biāo)準(zhǔn)。
延伸閱讀:
二、mysql字符集和排序規(guī)則
所為字符集,就是用來定義字符在數(shù)據(jù)庫(kù)中的編碼的集合。常見的字符集有:utf8(支持中文)和AccIS(不支持中文)
數(shù)據(jù)庫(kù)中的排序規(guī)則用來定義字符在進(jìn)行排序和比較的時(shí)候的一種規(guī)則。常見的如下:
(1) utf8_general_ci 不區(qū)分大小寫,utf8_general_cs 區(qū)分大小寫
(2) utf8_bin 規(guī)定每個(gè)字符串用二進(jìn)制編碼存儲(chǔ),區(qū)分大小寫,可以直接存儲(chǔ)二進(jìn)制的內(nèi)容
說明:所為排序規(guī)則,就是指字符比較時(shí)是否區(qū)分大小寫,以及是按照字符編碼進(jìn)行比較還是直接用二進(jìn)制數(shù)據(jù)比較
utf8_unicode_ci和utf8_general_ci對(duì)中、英文來說沒有實(shí)質(zhì)的差別。
utf8_general_ci校對(duì)速度快,但準(zhǔn)確度稍差。
utf8_unicode_ci準(zhǔn)確度高,但校對(duì)速度稍慢。
如果你的應(yīng)用有德語(yǔ)、法語(yǔ)或者俄語(yǔ),請(qǐng)一定使用utf8_unicode_ci。一般用utf8_general_ci就夠了。
所以一般字符集用utf-8,排序規(guī)則用utf8_general_ci