代码段:
.....
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("mysqldump -uroot -p123456 --host=localhost --port=3306 --skip-tz-utc -q --opt --no-autocommit -tc --where=\"id IN(1,2,3)\" database table");
.....运行这个命令为什么总会报错呢?
mysqldump: Got error: 1049: Unknown database 'IN(1,2,3)"' when selecting the database在命令行直接运行这个命令是没有问题的,并且在windows下运行也是没有问题的,但要linux下就会报错,到底是什么问题?谢谢

解决方案 »

  1.   

    数据库名大小写问题。 Linux下的数据库名是区分大小写的。mysql数据库名字大小字敏感问题和操作系统是相关联的。Windows不区分大小写。有一个配制参数可以让mysql使用全部小写或大写来解决这个问题。具体的记不清了,请查阅mysql手册
      

  2.   

    不是这个问题啊
    错误是:mysqldump: Got error: 1049: Unknown database 'IN(1,2,3)"' when selecting the database 它是把--where里面的条件当成了数据库名啊怎么会这样的?要怎么写才正确啊?真郁闷
      

  3.   


    使用单引号试试。
    runtime.exec("mysqldump -uroot -p123456 --host=localhost --port=3306 --skip-tz-utc -q --opt --no-autocommit -tc --where=\'id IN(1,2,3)\' database table");
      

  4.   

    runtime.exec("mysqldump -uroot -p123456 --host=localhost --port=3306 --skip-tz-utc -q --opt --no-autocommit -tc --where=\"id IN(1,2,3)\" database table");
    把表的名字用[]括起来看看。
      

  5.   

    mysql不可以用[]的我想应该就是--where=\"id IN(1,2,3)\"这段出问题了,可能是引号的问题,但就是不知道要怎么写
      

  6.   

    如果在shell里能正常运行,是很奇怪,一时也看不出来哪里出了问题。再给一个见意,你试试一下用 -w \"id IN(1,2,3)\" 换下--where还有,那个引号你注意一下是英文中的引号还是中文的? 我看着怎么不一样? 中文的是”和英文的", 你上面的好像是中文的。问题出在这里?
      

  7.   

    引号是英文的,这是可以确定的把--where换成-w也试过了,可就是不行不无论是哪种情况,在shell直接运行是没有问题的真郁闷
      

  8.   

    换个写变法试试看,先确定一下问题所在。--where=\"id=1 or id=2 or id=3\"如果能运行,就说明IN可能不能用,有可能是mysqldump自身的bug也说不定..
      

  9.   


    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "utf8"));用这种方式读就可以指定编码,指定的编码与文件的编码一致,应该不会有乱码的
      

  10.   


    改成这样的话错误是:mysqldump: Got error: 1049: Unknown database 'OR' when selecting the database好像是把--where后面的第一个空格之后的当成了数据库名
      

  11.   

    把where=\"id IN(1,2,3)\" 换成
    where=\"id=1\"试试,看是不是因为不认识in或or等关键字。