mysql 工作上遇到的問題
1.substr函數(shù)是從1開始計(jì)數(shù)南用,substr(originalStr,1,length)耗跛。習(xí)慣的寫成0口柳,導(dǎo)致截取的字符串有異常缠俺。
2.兩個(gè)table進(jìn)行模糊查詢時(shí)map時(shí)显晶,like的兩端都是參數(shù),例:select * from table1 t1,tables2 t2 where t1.name like '%__參數(shù)__%'壹士。直接寫在里面肯定是不行的磷雇, 會(huì)把它認(rèn)為是要比較的字符串。解決辦法:用concat函數(shù):concat('%',t2.name,'%');
3.遇到日期格式的問題躏救,項(xiàng)目上的創(chuàng)建時(shí)間唯笙,更新時(shí)間都是經(jīng)過一層封裝螟蒸,轉(zhuǎn)為字符串并附上毫米數(shù),例:xxxxxxxxxxxx.000這樣的七嫌。要把它轉(zhuǎn)為日期格式,拉取報(bào)表诵原。用str_to_date函數(shù),str_to_date(str,format)绍赛。format:'%Y-%m-%d %H:%i%s'
4.執(zhí)行計(jì)劃中的key_len的長度計(jì)算。該字段可推斷出sql實(shí)際執(zhí)行了哪些索引辑畦。具體計(jì)算公式如下:int--4個(gè)字節(jié)吗蚌,bigint---8個(gè)字節(jié),char類型的還要算上編碼方式褪测,如char(20) utf8,則長度為60。 varchar因?yàn)槭强勺冮L度在char的基礎(chǔ)上還要加上兩個(gè)字節(jié)侮措,text和blog一般不會(huì)建索引,即使建了也是截取的前綴乖杠,計(jì)算方式同char分扎。如果定義的索引列包含bull值,需要再加一個(gè)字節(jié)胧洒。
get到了這個(gè)畏吓,趕緊拿個(gè)表驗(yàn)證下:
接著看下字段類型:(出乎意料)
官方文檔表示:decimal計(jì)算方式有點(diǎn)特別:decimal(M,D),M表示總的位數(shù),D表示小數(shù)點(diǎn)后面的位數(shù)诗越。如decimal(19,0):表示總的長度為19位砖瞧,小數(shù)點(diǎn)后面沒有嚷狞。小數(shù)點(diǎn)前和后的數(shù)字分開存儲(chǔ)荣堰,且已9位數(shù)字為一組竭翠,用4個(gè)字節(jié)保存,如果低于9位數(shù)逃片,需要的字節(jié)如下:
0-------0
1-2-----1
3-4-----2
5-6-----3
7-9-----4
舉個(gè)栗子:decimal(20,6)==》小數(shù)點(diǎn)左邊14,右邊6位==》左邊分組5+9褥实,需要3+4個(gè)字節(jié),右邊需要3個(gè)损离,所以長度為10個(gè)。
再拿上面的decimal(19,0)來算:左邊為9+9+1 需要4+4+1個(gè)字節(jié)貌踏,再加上可以為null窟勃,再加1個(gè)祖乳,總共4+4+1+1=10.完美秉氧。
5.關(guān)于sql.date和util.date的問題
后者是前者的父類眷昆,前者用于在sql(jdbc)中對(duì)日期格式的處理,但是在java程序中一般使用后者汁咏。