吐槽MySQL

1、如果识别符是一个保留字或包含特殊字符,无论何时使用,必须将它引起来,例如when、key、operation、condition。识别符的引用符是反勾号(‘`’)。
2、MySQL采取了自增长主键auto_increment,mybatis的Mapper文件里使用<insert id="insert" useGeneratedKeys="true" keyProperty="id">。
3、公司的项目孵化器,自动生成column的时候会把列名用双引号围起来,导致sql语句无法执行,拿掉双引号,字段如果是保留字,用反勾号引起来。
4、字符串的拼接问题,'%' || UPPER(#{name,jdbcType=VARCHAR}) || '%'改成CONCAT('%', UPPER(#{name,jdbcType=VARCHAR}), '%'),MySQL不支持||符号拼接字符串,要使用CONCAT函数。
5、MySQL行长度限制。
MySQL要求一个行的定义长度不能超过65535。
若定义的表长度超过这个值,则提示ERROR 1118 (42000): Row size too large.
The maximum row size for the used table type, not counting BLOBs, is 65535.
You have to change some columns to TEXT or BLOBs。
字符类型若为UTF8,每个字符最多占3个字节,最大长度不能超过21845。
6、MySQL InnoDB存储引擎表收到页块大小,数据以B+树的方式组织数据,导致单行数据不能超过8k,从而影响了表中大字段数据类型varchar,text,blob个数限制。
在16k页块大小下,最好不要超过10个,在表设计中需要注意这个限制。如果要突破这个限制,请使用MySQL MyISAM引擎存储该表。
7、TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
8、MySQL默认允许最大的数据包是1M,可以修改my.ini,max_allowed_packet=20M。
9、char最大255个字符
varchar最大65535个字节(所以,不同字符集,所能存储的字符个数是不同的)
text最大65535字符
10、你给一个timestamp设置为on update current_timestamp的时候,其他的timestamp字段需要显式设定default值。
CREATE TABLE  `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE = MYISAM

11、从MySQL 5.6.4开始才能支持到微秒。
12、不支持full join。
13、不支持hash join或者sort merge join,只支持nested loops。
14、数据文件只能放到固定目录,导致不能直接存储在多个磁盘上。

猜你喜欢

转载自cutesunshineriver.iteye.com/blog/2074122