首先分析乱码的情况
1.写入数据库时作为乱码写入
2.查询结果以乱码返回
究竟在发生乱码时是哪一种情况呢?
我们先在mysql 命令行下输入
show variables like '%char%';
查看mysql 字符集设置情况:
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk ......
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:wcnc_db.sql
本篇文章来源于 站长资讯网 原文链接:http://mysql.chinahtml.com/2005/mysql_out_mysql-1127998925422.shtml ......
最近使用root用户编写了几个存储过程,但是使用普通用户通过JDBC连接执行却报错:
java.lang.NullPointerException......
或
java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.
报哪个错要看你使用的Connector/J版本了。
这是因为JDBC调用存储过程时需要有show create procudure 权限或是有表mysql.proc的select权限。通过在JDBC连接属性中设置noAccessToProcedureBodies=true(默认false)解决或是授予普通用户相应的权限或者是按http://lists.mysql.com/commits/17817中的patch修改。
该noAccessToProcedureBodies=true的影响:
1. 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常。
2. 存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式 ......
网上的解决方法大多是要修改mysql配置文件,对我们不适合。jhost主页上看到篇文章,但里面说的驱动早就是老驱动了,怀疑他是从网上复制过来的老版本,不知是否能用。现在把我自己的解决方案贴出来,供大家参考,欢迎批评指正。
大家注意红色部分,废话不多说:
第一步:网页头设置:
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.sql.*" %>
第二步:request设置:
<%
request.setCharacterEncoding("gbk");
%>
第三步:bean中连接mysql代码设置:
MySqldriver = "com.mysql.jdbc.Driver";
MySqlURL = "jdbc:mysql://";
MySqlURL =MySqlURL+server+":"+port+"/"+dbname+"?user="+user+"&password="+pass+"&useUnicode=true&characterEncoding=utf8";
第四步:
汉字存入之前先g2i,取出汉字之后先i2g转换,然后就可以在jsp页面上正确显示了
其中g2i函数和i2g函数分别如下:
public static String g2i(String s0){
try{
return n ......
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.Types;
using MySql.Data.MySqlClient;
/// <summary>
/// C#操作mysql基类
/// </summary>
public class MySqlobj
{
private MySqlConnection conn;
private MySqlCommand com;
private bool _alreadyDispose = false;
#region 构造与柝构
public MySqlobj()
{
try
{
conn = new MySqlConnection(ConfigurationManager.AppSettings["mysqlconn"]);
conn.Open();
com = new MySqlCommand();
com.Connection = conn;
}
catch (Exception ee)
{
throw new Exception("连接数据库出错");
}
}
~MySqlobj()
{
Dispose();
}
protected virtual void Dispose(bool isDisposing)
......
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.Types;
using MySql.Data.MySqlClient;
/// <summary>
/// C#操作mysql基类
/// </summary>
public class MySqlobj
{
private MySqlConnection conn;
private MySqlCommand com;
private bool _alreadyDispose = false;
#region 构造与柝构
public MySqlobj()
{
try
{
conn = new MySqlConnection(ConfigurationManager.AppSettings["mysqlconn"]);
conn.Open();
com = new MySqlCommand();
com.Connection = conn;
}
catch (Exception ee)
{
throw new Exception("连接数据库出错");
}
}
~MySqlobj()
{
Dispose();
}
protected virtual void Dispose(bool isDisposing)
......
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,
要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行
long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes
long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
把上述参数打开,运行一段时间,就可以关掉了。
接下来就是分析了,这里的文件名字叫host-slow.log。
先mysqldumpslow –help以下,e它主要用的是
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的 ......