说明:没有特殊说明的话,
Mariadb的版本为:
MariaDB [mydb]> select version();
1 | +------------------------------+ |
MySQL的版本:
mysql> select version();
1 | +------------+ |
数据类型:
ISO SQL:2003 standard
CHAR(N): 0 to 255
VARCHAR(N): 0 to 65535
char(N)一旦分配,就固定了;
char(4)超过后怎么处理?
sql_mode
1 | MariaDB [mydb]> SHOW VARIABLES LIKE 'sql_mode'; |
对于MySQL来说:
ERROR 1074 (42000): Column length too big for column ‘col1’ (max = 21845); use BLOB or TEXT instead
binary类型:
binary –>和char相似,不过区别一个是以二进制的方式进行存储
varbinary –>varchar,这个和varchar相似;
1 | MariaDB [test]> CREATE TABLE t1( col1 binary(4)); |
BLOB类型和TEXT类型:
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM类型:
在MariaDB中是非严格类型:
1 | MariaDB [test]> create table enum_a( col1 enum('a','b','c')); |
会显示为空,以及有警告;
而在MySQL中则会直接报错,无法进行插入;
1 | MariaDB [test]> insert into enum_a values('c'); |
SET和ENUM类型的区别在于SET可以插入多个指定的值,而ENUM不能;
日期时间类型:
DATETIME: 8个字节 ‘1000-01-01 00:00:00’ to ‘9999-12-31 23-59:59’
DATE:3个字节 ‘1000-01-01’ to ‘9999-12-31’
TIME:3个字节 ‘-838:59:59’ to ‘838:89:89’
TIMESTAMP ‘1970-01-01 00:00:00’ to mid-year 2037
YEAR: 1901 to 2155(for YEAR(4)) 1970 to 2069 (for YEAR(2))
TIMESTAMP主要应用于自动更新地方;
例如记录最后登录时间:
1 | MariaDB [mydb]> create table time_t1 ( |
会发现这个时间发生了改变;;
1 | use test; |
载入系统时区至mysql timezone中:
x180@x450vc:~$ mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -uroot -p mysql
会发现mysql.time_zone和mysql.time_zone_name会有内容了;
1 | create table tz_t1( |
关于concat的基本使用:
在col1列的所有字段增加一个-号,col2增加一个+号:
1 | SELECT CONCAT(col1,'-'),CONCAT(col2,'+') FROM tb1; |
问题一
关于全文索引的问题
MariaDB和MySQL的InnoDB存储引擎都支持全文索引,但是有条件:
1 | +----+-----------------------------------------+ |
(1)在插入数据的时候,如:iam 和 i am,是两个不同的存储,在匹配的时候,是以空格作为分割符进行匹配,如果想搜索am,只会出来 i am,而不会出来iam;
(2)支持中文全文索引,但是支持力度不好:
如上:必须对中文进行精确查询,而且中文个数最好在3个以上;
而且前提是必须有分隔符,没有分隔符将不会查出来;
对于innodb 全文索引来讲,感觉不是那么的明显,另外在mysql 5.6版本,增加了Online DDL,可以在线DDL,这个对于
DBA来讲非常的好,但是目前对于Online DDL不是太了解,另外在并发量比较大的时候,增加fulltext是不允许写的,所以
建议在访问量小的时候进行修改;
另外在alter table add fulltext的时候有一个警告:
17:19:16 alter table full_t1 add fulltext(content) 0 row(s) affected, 1 warning(s): 124 InnoDB rebuilding table to add column FTS_DOC_ID Records: 0 Duplicates: 0 Warnings: 1 0.125 sec
我在网上看到可以:
1 | drop table if exists full_t1; |
但是这样不行,总之,对于Online DDL来讲,一定要在并发量小的情况下进行修改;
关于concat的问题
关于blob和text的问题
TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据
关于timezone修改时区的问题