mysql.notee_mysql note

mysql 工作上遇到的问题

1.substr函数是从1开始计数,substr(originalStr,1,length)。习惯的写成0,导致截取的字符串有异常。

2.两个table进行模糊查询时map时,like的两端都是参数,例:select * from table1 t1,tables2 t2 where t1.name like '%__参数__%'。直接写在里面肯定是不行的, 会把它认为是要比较的字符串。解决办法:用concat函数:concat('%',t2.name,'%');

3.遇到日期格式的问题,项目上的创建时间,更新时间都是经过一层封装,转为字符串并附上毫米数,例:xxxxxxxxxxxx.000这样的。要把它转为日期格式,拉取报表。用str_to_date函数,str_to_date(str,format)。format:'%Y-%m-%d %H:%i%s'

4.执行计划中的key_len的长度计算。该字段可推断出sql实际执行了哪些索引。具体计算公式如下:int--4个字节,bigint---8个字节,char类型的还要算上编码方式,如char(20) utf8,则长度为60。 varchar因为是可变长度在char的基础上还要加上两个字节,text和blog一般不会建索引,即使建了也是截取的前缀,计算方式同char。如果定义的索引列包含bull值,需要再加一个字节。

get到了这个,赶紧拿个表验证下:

75cd2e912f8c

可以看到是10

接着看下字段类型:(出乎意料)

75cd2e912f8c

尴尬了,怎么算到10的???

官方文档表示:decimal计算方式有点特别:decimal(M,D),M表示总的位数,D表示小数点后面的位数。如decimal(19,0):表示总的长度为19位,小数点后面没有。小数点前和后的数字分开存储,且已9位数字为一组,用4个字节保存,如果低于9位数,需要的字节如下:

0-------0

1-2-----1

3-4-----2

5-6-----3

7-9-----4

举个栗子:decimal(20,6)==》小数点左边14,右边6位==》左边分组5+9,需要3+4个字节,右边需要3个,所以长度为10个。

再拿上面的decimal(19,0)来算:左边为9+9+1 需要4+4+1个字节,再加上可以为null,再加1个,总共4+4+1+1=10.完美。

5.关于sql.date和util.date的问题

后者是前者的父类,前者用于在sql(jdbc)中对日期格式的处理,但是在java程序中一般使用后者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值