MySQL软件是一种开放源码软件。
开放源码”意味着任何人都能使用和改变软件。任何人都能从Internet下载MySQL软件,而无需支付任何费用。如果愿意,你可以研究源码并进行恰当的更改,以满足你自己的需求。MySQL软件采用了GPL(GNU通用公共许可证)。
MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。
MySQL数据库软件是一种客户端/服务器系统,由支持不同后端的1个多线程SQL服务器,数种不同的客户端程序和库,众多管理工具和广泛的应用编程接口API组成。
我们还能以嵌入式多线程库的形式提供MySQL服务器,你可以将其链接到你的应用程序,从而获得更小、更快、和更易管理的产品。
使用GNU Automake、Autoconf和Libtool进行移植。
采用Purify(商业内存溢出检测器)以及GPL工具Valgrind测试了MySQL代码。
由于在MySQL 3.23中使用了MyISAM存储引擎,最大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。
在默认情况下,MySQL创建的MyISAM表允许的最大尺寸为4GB。你可以使用SHOW TABLE STATUS
语句或myisamchk -dv tbl_name
检查表的最大尺寸。
如果需要使用大于4GB的MyISAM表(而且你的操作系统支持大文件),可使用允许AVG_ROW_LENGTH
和MAX_ROWS
选项的CREATE TABLE
语句。
如果你的大表是只读的,可使用myisampack
压缩它。myisampack
通常能将表压缩至少50%,因而,从结果上看,可获得更大的表。此外,myisampack
还能将多个表合并为1个表。
2000年兼容性
MySQL服务器不存在2000年(Y2K)兼容性问题,通过以下SQL演示,表明MySQL服务器在处理直至9999年的DATE或DATETIME值方面不存在问题,在处理2030年以前的TIMESTAMP值方面也不存在问题:
DROP TABLE IF EXISTS y2k;
CREATE TABLE y2k (date DATE,
date_time DATETIME,
time_stamp TIMESTAMP);
INSERT INTO y2k VALUES
('1998-12-31','1998-12-31 23:59:59',19981231235959),
('1999-01-01','1999-01-01 00:00:00',19990101000000),
('1999-09-09','1999-09-09 23:59:59',19990909235959),
('2000-01-01','2000-01-01 00:00:00',20000101000000),
('2000-02-28','2000-02-28 00:00:00',20000228000000),
('2000-02-29','2000-02-29 00:00:00',20000229000000),
('2000-03-01','2000-03-01 00:00:00',20000301000000),
('2000-12-31','2000-12-31 23:59:59',20001231235959),
('2001-01-01','2001-01-01 00:00:00',20010101000000),
('2004-12-31','2004-12-31 23:59:59',20041231235959),
('2005-01-01','2005-01-01 00:00:00',20050101000000),
('2030-01-01','2030-01-01 00:00:00',20300101000000);
-- ('2040-01-01','2040-01-01 00:00:00',20400101000000), -- 实际运行的时候发现最后这两个时间戳不行,会报错:
-- ('9999-12-31','9999-12-31 23:59:59',99991231235959); -- “Incorrect datetime value: '99991231235959' for column 'time_stamp' at row 13”
SELECT * FROM y2k;
DROP TABLE IF EXISTS y2k;
CREATE TABLE y2k (date DATE,
date_time DATETIME,
time_stamp TIMESTAMP);
INSERT INTO y2k VALUES
('1998-12-31','1998-12-31 23:59:59',19981231235959),
('1999-01-01','1999-01-01 00:00:00',19990101000000),
('1999-09-09','1999-09-09 23:59:59',19990909235959),
('2000-01-01','2000-01-01 00:00:00',20000101000000),
('2000-02-28','2000-02-28 00:00:00',20000228000000),
('2000-02-29','2000-02-29 00:00:00',20000229000000),
('2000-03-01','2000-03-01 00:00:00',20000301000000),
('2000-12-31','2000-12-31 23:59:59',20001231235959),
('2001-01-01','2001-01-01 00:00:00',20010101000000),
('2004-12-31','2004-12-31 23:59:59',20041231235959),
('2005-01-01','2005-01-01 00:00:00',20050101000000),
('2030-01-01','2030-01-01 00:00:00',20300101000000);
-- ('2040-01-01','2040-01-01 00:00:00',20400101000000), -- 实际运行的时候发现最后这两个时间戳不行,会报错:
-- ('9999-12-31','9999-12-31 23:59:59',99991231235959); -- “Incorrect datetime value: '99991231235959' for column 'time_stamp' at row 13”
SELECT * FROM y2k;
MySQL邮件列表:http://lists.mysql.com/。
MySQL致力于支持全套ANSI/ISO SQL标准,但不会以牺牲代码的速度和质量为代价。
将sql_mode变量的值设置为与ANSI模式相关的所有选项。你可以检查其结果,如下所示:
mysql> SET GLOBAL sql_mode='ansi';
mysql> SELECT @@global.sql_mode;
-> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,
IGNORE_SPACE,ANSI';
mysql> SET GLOBAL sql_mode='ansi';
mysql> SELECT @@global.sql_mode;
-> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,
IGNORE_SPACE,ANSI';
MySQL服务器会将每个数据库映射到MySQL数据目录下的1个目录中,并将数据库中的表映射到数据库目录下的文件名。