求一个mysql配置的指点
先说一下情况,我电脑装的mysql默认配置的,
系统:windows 7
mysql版本:Server version: 5.5.28 MySQL Community Server (GPL)
jdbc:mysql-connector-java-5.1.22-bin.jar
公司电脑,配置应该被改过,我看了看my.cnf也没发下啥特别的设置..
系统:linux
mysql版本:5.1.58
jdbc:不知道
test1表很简单,只有一个字段id int
然后是下面的代码
 
public static void main(String[] args) throws Exception { 
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			Connection connection = DriverManager 
					.getConnection("jdbc:mysql://localhost/wazhu?user=root&password=root"); 
			long begin = System.currentTimeMillis(); 
			connection.setAutoCommit(false); 
			PreparedStatement pst = connection 
					.prepareStatement("insert into test1 values(?)"); 
			for (int i = 0; i < 10000; i++) { 
				if (i == 5) 
					pst.setInt(1, i); 
				else 
					pst.setString(1, "aaaa"); 
				pst.addBatch(); 
			} 
			pst.executeBatch(); 
			connection.commit(); 
			System.out.println("cost:" + (System.currentTimeMillis() - begin)); 
		} catch (Exception e) { 
			e.printStackTrace(); 
		} 
	} 
 
有2个问题,
1.这个代码在我电脑上执行会抛出异常,因为我设置pst.setString(1, "aaaa");,而id是int型的,这个我能想通,但是在公司电脑上不会报错,成功把所有值插入,只是在应该是5的那个位置值是0.
2.我自己的电脑必须设置connection.setAutoCommit(false);,这样批量提交才会很快执行,否则都是一条一条提交的,非常慢,但是公司电脑可以不要这句,也不需要connection.commit();,一样的能够批量提交.我也查看了variables,autocommit都是on
我想问,我要怎么在mysql设置才能做到跟公司里一样的效果?
------解决方案-------------------- 可以修改mysql的配置文件my.cnf来关闭autocommit
[mysqld]  
init_connect='SET autocommit=0'  //在mysqld里面加上这些内容
------解决方案-------------------- 引用: 引用: 
是不是你公司的表不innodb类型的第二个问题对了,因为windows默认的引擎是innodb,linux是myisam.....我改了现在很快了... 
还有第一个问题不知道原因...等搞定了一起结贴... 
好像是跟sql_mode有关系,我把它改成""了,自己手动在数据库里插数据就算类型错了都不会报错,但是用jdbc还是会抛异常... 
sql_mode控制着MySQL能接受的语法形态和决定了是否会无视错误,验证输入语法和数据。
不要改成"",改成ANSI模式
mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。 
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。 
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 
http://technoboy.iteye.com/blog/1004905