SELECT * INTO OUTFILE ‘./test.xls‘ FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50
这样,应该会在你的mysql的var/目录下产生一个test.xls的文件。。。
但是如果你的shell的登录帐户和mysql的运行账户不同,很可能这个方法就不适用了,因为你可以通过mysql控制台来产生这个文件,但是你却没有办法通过shell来对这个文件进行 *** 作,因为用户不同,没有访问权限。
这个时候,同事告诉偶滴办法就重装登录了!!!
echo "SELECT * FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50"| /usr/local/mysql/bin/mysql -hlocalhost -uroot -pxxxxx >/tmp/test.xls
ok,把你的test.xls文件从tmp下载到本地打开来看看吧。。。
什么?中文乱码?
别着急。。。
因为office默认的是gb2312编码,服务器端生成的很有可能是utf-8编码,这个时候你有两种选择,
1.在服务器端使用iconv来进行编码转换,
iconv -futf8 -tgb2312 -otest2.xls test.xls
如果转换顺利,那么从server上下载下来就可以使用了。
转换如果不顺利,则会提示:iconv: illegal input sequence at position 1841 类似于这样的错误,
先把test.xls下载下来,这个时候文件是utf-8编码的,用excel打开,乱码。
把test.xls以文本方式打开,然后另存为,在编码选择ANSI编码,保存。
ok,再用excel打开,乱码问题,烟消云散。。。
mysql表里面搞个longblob字段保存word代码:
1)上传
try {
Class.forName("com.mysql.jdbc.Driver").newInstance()
String url ="jdbc:mysql://localhost/test?user=root&password=root&useUnicode=true&characterEncoding=gbk"
Connection conn = DriverManager.getConnection(url)
Statement stmt = conn.createStatement()
stmt.execute("insert into test(myid) values (5)")
stmt.close()
PreparedStatement pstmt = null
String sql = ""
File file = new File("c:\\kick.jpg")
InputStream photoStream = new FileInputStream(file)
sql = " UPDATE test SET photo = ? WHERE myid = 5"
pstmt = conn.prepareStatement(sql)
pstmt.setBinaryStream(1, photoStream, (int)file.length())
pstmt.executeUpdate()
pstmt.close()
conn.close()
} catch (Exception e) {
e.printStackTrace()
}
2)下载:
PreparedStatement pst = ..... //省略获取Connection及查询的sql
ResultSet rs = pst.executeQuery()
InputStream is = rs.getBinaryStream(1)//1表示你的word字段在结果集中的索引号
FileOutputStream fos = new FileOutputStream("path")
byte [] buf = new byte[1024]
while(is.read(buf)!=-1){
fos.write(buf)
}
//close省略
大概思路,自己完善
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)