com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table engine 'InnoDB'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1026)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
原來我使用了綠色版的mysql,以前能用是因為my.ini文件已經存在了。而我重新ghost一下,就沒有這個文件了。
默認情況下配置文件可以放在以下目錄中(假定我的mysql安裝在d:\server\mysql下):
C:\my.ini C:\my.cnf C:\WINDOWS\my.ini C:\WINDOWS\my.cnf D:\server\mysql\my.ini D:\server\mysql\my.cnf
你可以用mysqld-nt.exe --install,把mysql添加到系統服務中,然后就可以了。
另外我發現原來可以指定表的engine
MySQL兩種表存儲結構MyISAM和InnoDB
MySQL支持的兩種主要表存儲
格式MyISAM,InnoDB,上個月做個項目時,先使用了InnoDB,結果速度特別慢,1秒鐘只能插入10幾條。后來換成MyISAM格式,一秒鐘
插入上萬條。當時決定這兩個表的性能也差別太大了吧。后來自己推測,不應該差別這么慢,估計是寫的插入語句有問題,決定做個測試:
測試環境:Redhat Linux9,4CPU,內存2G,MySQL版本為4.1.6-gamma-standard
測試程序:Python+Python-MySQL模塊。
測試方案:
1、MyISAM格式分別測試,事務和不用事務兩種情況:
2、InnoDB格式分別測試AutoCommit=1(不用begin transaction和用begin transaction模式),
AutoCommit=0 (不用begin transaction和用begin transaction模式)四種情況。
測試方法為插入10000條記錄。為了測試不互相影響,單獨建立了專用的測試表,建表語句如下:
1、MyISAM不用事務表:
CREATE TABLE `MyISAM_NT` (
`TableId` int(11) NOT NULL default '0',
`TableString` varchar(21) NOT NULL default ''
) ENGINE=MyISAM;
2、MyISAM用事務表:
CREATE TABLE `MyISAM_TS` (
`TableId` int(11) NOT NULL default '0',
`TableString` varchar(21) NOT NULL default ''
) ENGINE=MyISAM;
3、InnoDB關閉AutoCommit,不用事務:
CREATE TABLE `INNODB_NA_NB` (
`TableId` int(11) NOT NULL default '0',
`TableString` varchar(21) NOT NULL default ''
) ENGINE=InnoDB;