2008年9月27日星期六

ubuntu 乱码

最近Ubuntu 8.04修改了系统字体配置文件的构成,将原来的/etc/fonts/language-selector.conf分解成了四个文件,分别对应到 /etc/fonts/conf.d/下的29-language-selector-zh.conf、69-language-selector- zh-cn.conf、99-language-selector-zh.conf和CJK_aliases,而我们经常修改的sans字体渲染顺序在 69-language-selector-zh-cn.conf文件中,所以如果您发现系统字体显示不对,可以直接调整69-language- selector-zh-cn.conf,按照您喜欢的字体顺序调整好后,重启X后,系统的字体应该就恢复了。

但是这时候可能您的Flash里面的中文还是乱码或者和系统的字体不一致,这个的解决方法很简单,将/etc /fonts/conf.d/49-sansserif.conf删除即可,这个文件为在所有非sans-serif、serif字体中附加sans- serif,删除它后就Flash里面的字体配置就和外部系统的字体一致了。另外如果这样修改后还有乱码的话,试试调整下69-language- selector-zh-cn.conf里面的中文字体顺序。

2008年9月19日星期五

java IO 操作

package home.action;

import java.io.*;

public class Test {
public static void main(String[] args) throws IOException {
// 1.以行为单位从一个文件读取数据
BufferedReader in = new BufferedReader(new FileReader(
"/home/tiger/Desktop/Suse"));
String s, s2 = new String();
while ((s = in.readLine()) != null) {
s2 += s + "\n";
}
System.out.println(s2);
in.close();

// 1b. 接收键盘的输入
BufferedReader stdin = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());

// 2. 从一个String对象中读取数据
StringReader in2 = new StringReader(s2);
int c;
while ((c = in2.read()) != -1) {
System.out.println((char) c);
}
in2.close();


// 3. 从内存取出格式化输入
try {
DataInputStream in3 = new DataInputStream(new ByteArrayInputStream(
s2.getBytes()));
while (true)
System.out.println((char) in3.readByte());
} catch (EOFException e) {
System.out.println("End of stream");
}

// 4. 输出到文件
try {
BufferedReader in4 = new BufferedReader(new StringReader(s2));
PrintWriter out1 = new PrintWriter(new BufferedWriter(
new FileWriter("F:\\nepalon\\ TestIO.out")));
int lineCount = 1;
while ((s = in4.readLine()) != null)
out1.println(lineCount++ + ":" + s);
out1.close();
in4.close();
} catch (EOFException ex) {
System.out.println("End of stream");
}

// 5. 数据的存储和恢复
try {
DataOutputStream out2 = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(
"F:\\nepalon\\ Data.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("\nThas was pi:writeChars\n");
out2.writeBytes("Thas was pi:writeByte\n");
out2.close();
DataInputStream in5 = new DataInputStream(new BufferedInputStream(
new FileInputStream("F:\\nepalon\\ Data.txt")));
BufferedReader in5br = new BufferedReader(
new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
} catch (EOFException e) {
System.out.println("End of stream");
}
// 6. 通过RandomAccessFile操作文件
RandomAccessFile rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat",
"rw");
for (int i = 0; i < 10; i++)
rf.writeDouble(i * 1.414);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for (int i = 0; i < 10; i++)
System.out.println("Value " + i + ":" + rf.readDouble());
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
rf.seek(5 * 8);
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for (int i = 0; i < 10; i++)
System.out.println("Value " + i + ":" + rf.readDouble());
rf.close();
}
}

标签:

2008年9月16日星期二

Spring代理

自己写的一个spring代理的实例程序,应该还挺全面!
http://www.mediafire.com/?b1dw2nazwyi
点击下载,里面的注释写的很清楚

标签:

Spring代理 之 ProxyFactoryBean

  1. package home.dong.aop;
  2. import org.springframework.aop.framework.ProxyFactoryBean;
  3. import org.springframework.beans.factory.BeanFactory;
  4. import org.springframework.beans.factory.xml.XmlBeanFactory;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import org.springframework.core.io.ClassPathResource;
  8. import home.dong.advice.MyMethodBeforeAdvice;
  9. import home.dong.impl.Lion;
  10. import home.dong.impl.Tiger;
  11. import home.dong.inter.Animal;
  12. public class Spring_AOP {
  13.     public void proxy_A_Animal() throws ClassNotFoundException {
  14.         Lion lion = new Lion();
  15.         ProxyFactoryBean pfb = new ProxyFactoryBean();
  16.         pfb.setProxyTargetClass(true);
  17.         // 为true时 指定代理的是 类
  18.         // 而不是借口,此时使用的是CGLIB来实现代理,可以看到被代理的实体类的构造方法被调用*两次*
  19.         // 默认值为false
  20.         // pfb.setProxyInterfaces(new Class[]{Animal.class});
  21.         // 指定代理的是借口而非类,此时使用的是java来实现代理(java 代理必须指定借口)
  22.         /**
  23.          * 以上两个方法 setProxyTargetClass() setProxyInterfaces()
  24.          * 如果同时指定(既-----指定直接代理类,而又指定了代理的借口),则spring会优先选择java代理方式
  25.          * 
  26.          * 如果同时未指定,则spring会根据被代理类是否实现了某个借口而自动选择使用java代理还是CBLIB代理. 注意:
  27.          * 如果被代理对象实现了借口
  28.          * 既spring选择java代理,则在通过代理工厂得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出
  29.          * ClassCastException异常.
  30.          * 如果被代理对象没有实现任何借口,既spring选择CGLIB代理,则在通过代理工厂得到对象实例时必须将得到的对象直接转换成被代理对象的类型
  31.          * 
  32.          */
  33.         pfb.setTarget(lion);
  34.         pfb.addAdvice(new MyMethodBeforeAdvice());
  35.         // 使用java代理必须使用其借口来得到对象,否则会转型出错
  36.         // Animal obj = (Animal) pfb.getObject();
  37.         Lion ln = (Lion) pfb.getObject();
  38.         String str = ln._Fight("Tiger");
  39.         System.out.println(str);
  40.     }
  41.     public static void main(String[] args) throws ClassNotFoundException {
  42.          Spring_AOP aop = new Spring_AOP();
  43.          aop.proxy_A_Animal();
  44.     }
  45. }

标签:

Spring代理 之 ProxyFactory

  1. package home.dong.aop;
  2. import java.lang.reflect.Method;
  3. import home.dong.advice.MyMethodBeforeAdvice;
  4. import home.dong.impl.Tiger;
  5. import home.dong.inter.Animal;
  6. import org.aopalliance.aop.Advice;
  7. import org.springframework.aop.MethodBeforeAdvice;
  8. import org.springframework.aop.framework.ProxyFactory;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;
  11. import org.springframework.aop.support.DefaultPointcutAdvisor;
  12. public class Spring_Base_AOP {
  13.     public void proxy_A_Animal_1() {
  14.         Tiger animal_Tiger = new Tiger();
  15.         ProxyFactory factory = new ProxyFactory();
  16.         factory.addAdvice(new MyMethodBeforeAdvice());
  17.         // 如果设置了接口
  18.         // factory.setInterfaces(new Class[]{Animal.class});
  19.         // 或
  20.         // factory.addInterface(Animal.class);
  21.         // 那么 ProxyFactory会 使用java 代理来实现 (使用java 代理必须设置接口---既代理目标对象所实现的接口 )
  22.         // 如果没有设置或添加接口 ProxyFactory 则会使用 CGLIB来实现代理
  23.         factory.setTarget(animal_Tiger);
  24.         Animal tiger = (Animal) factory.getProxy();
  25.         System.out.println(tiger._Fight("Lion"));
  26.     }
  27.     public static void main(String[] args) {
  28.         Spring_Base_AOP aop = new Spring_Base_AOP();
  29.         aop.proxy_A_Animal_1();
  30.     }
  31. }

标签:

Spring代理 之 java代理

  1. package home.dong.aop;

  2. import home.dong.impl.Lion;
  3. import home.dong.impl.Tiger;
  4. import home.dong.inter.Animal;
  5. import java.lang.reflect.InvocationHandler;
  6. import java.lang.reflect.Method;
  7. import java.lang.reflect.Proxy;
  8. import org.springframework.aop.framework.ProxyFactory;
  9. public class J2EE_Base_AOP {
  10.     /**
  11.      * java代理,要求代理目标必须时间某个接口,则在通过代理得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出
  12.      */

  13.     /**
  14.      * java代理 I 匿名内部类实现, 直接实现InvocationHandler接口
  15.      * @param tiger
  16.      */
  17.     public void proxy_A_Animal_1(final Tiger tiger) {
  18.         Animal animal = (Animal) Proxy.newProxyInstance(tiger.getClass()
  19.                 .getClassLoader(), tiger.getClass().getInterfaces(),
  20.                 new InvocationHandler() {
  21.                     public Object invoke(Object proxy, Method method,
  22.                             Object[] args) throws Throwable {
  23.                         System.out.println("我在这里代理了....... 下面要执行的方法是:  "
  24.                                 + method.getName());
  25.                         if (method.getName().equals("_Fight")) {
  26.                             System.out.println("fighting!!!!!!!!!!!!!!!!");
  27.                             System.out.println("对手是====" + args[0]);
  28.                         }
  29.                         return method.invoke(tiger, args);
  30.                     }
  31.                 });
  32.         System.out.println(animal._Drink("water"));
  33.         System.out.println(animal._Eat("meat"));
  34.         System.out.println(animal._Fight("Lion"));
  35.     }

  36.     /**
  37.      * java代理 II
  38.      */
  39.     public void proxy_A_Animal_2() {
  40.         // 实例化要被代理的类
  41.         Lion lion = new Lion();
  42.         Animal animal = (Animal) Proxy.newProxyInstance(Thread.currentThread()
  43.                 .getContextClassLoader(), lion.getClass().getInterfaces(),
  44.                 new MyInvocationHandler<Lion>(lion));
  45.         animal._Drink("Milk");
  46.         animal._Eat("Meat");
  47.         animal._Fight("Tiger");
  48.     }

  49.     // 内部类 实现InvocationHandler接口 对方法进行拦截
  50.     public class MyInvocationHandler<T> implements InvocationHandler {
  51.         private T targetClass;
  52.         MyInvocationHandler(T target) {
  53.             this.targetClass = target;
  54.         }

  55.         /**
  56.          * 调用代理目标的方法
  57.          * 
  58.          * @param proxy
  59.          *            代理实例
  60.          * @param mthod
  61.          *            代理目标的方法
  62.          * @param args
  63.          *            代理目标的方法参数
  64.          */
  65.         public Object invoke(Object proxy, Method method, Object[] args)
  66.                 throws Throwable {
  67.             System.out.println("这里进行真正的方法拦截--------拦截将要执行的方法");
  68.             System.out.println("=====================================");
  69.             System.out.println("要执行的方法是: "
  70.                     + method.getDeclaringClass().getName() + " 的 "
  71.                     + method.getName());
  72.             /*
  73.              * 注意:method.invoke(Object obj,Object... args)
  74.              * 方法中第一个参数不能传递proxy,否则会出现无限递归调用,应该传递实际的代理目标的实例
  75.              */
  76.             Object obj = method.invoke(targetClass, args);
  77.             System.out.println(obj.toString());
  78.             return obj;
  79.         }
  80.     }

  81.     public static void main(String[] args) {
  82.         J2EE_Base_AOP aop = new J2EE_Base_AOP();
  83.         aop.proxy_A_Animal_1(new Tiger());
  84.         System.out.println("\n\n\n");
  85.         aop.proxy_A_Animal_2();
  86.     }

  87. }

标签:

2008年9月5日星期五

Sping-Struts2集成

Struts2和Spring的集成要用到Spring插件包,这个包是同 Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,他会用Struts2配置文档中的class属性去和Spring配置文档中的id属性进行关联,假如能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:
1. 允许spring来创建Action、Interceptror和Result
2. 由Struts创建的对象能够被Spring装配
3. 提供了2个拦截器来自动装配action,假如没有使用Spring ObjectFactory的话
这里要注意的是,我们不必在Spring中去注册action,尽管我们能够这么去做,通常Struts框架会自动的从action mapping中创建action对象。
要实现和Struts和Spring的集成有如下几步:
一>.
将struts2-spring-plugin-2.0.8.jar文档包含到我们的应用中,放到WEB-INF/lib目录下面即可。在这个插件包中有个struts-plugin.xml文档,他的内容如下:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
这里他将框架常量struts.objectFactory覆盖了,配置为”spring”,其实这里是使用了缩写,我们能够写全称: org.apache.struts2.spring.StrutsSpringObjectFactory。这个缩写的”spring”是和bean配置中的name属性相对应的。默认情况下任何由框架创建的对象都是由ObjectFactory实例化的,ObjectFactory提供了和其他IoC 容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或他的任何子类,并且要带有一个不带参数的构造方法。在这里我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory。

此外,上面我们说了,假如action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配action,默认情况下框架使用的自动装配策略是name,也就是说框架会去 Spring中寻找和action属性名字相同的bean,可选的装配策略更有:type、auto、constructor,我们能够通过常量 struts.objectFactory.spring.autoWire来进行配置。

二>.配置Spring监听器,将Spring.jar包包含到应用中
将下面一段话插入到web.xml文档中,同时将spring.jar文档放到WEB-INF/lib目录下面。

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

三>.利用Spring配置文档来注册对象

这之后的步骤就和我们使用单独使用Spring相同了,现在我们就已完成了Struts和Spring的整合了。这里有一点要注意的是,我们还要指定Spring配置文档的地点,默认情况下,容器会到WEB-INF目录下面去寻找applicationContext.xml文档。假如我们想指定别的地方的配置文档或指定多个配置文档,能够通过在web.xml文档中定义context-param元素来指定,如下所示:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml,classpath:applicationContext-*.xml
</param-value>
</context-param>
上面一段话表示WEB-INF下面的applicationContext.xml文档连同classpath下面的任何匹配applicationContext-*.xml模式的文档都会作为Spring配置文档被装载。

标签:

2008年9月1日星期一

Mysql 基础问题

本资料内容来自与MYSQL.CN论坛,谢谢那些默默做出贡献的朋友!

一、 关于MySQL5
MySQL5系列数据库是MySQL的最新版本的数据库,比较流行的发行版是mysql-5.0.18。MySQL 英文官方网站是http://www.mysql.com

二、 获得MySQL5
所有的关于MySQL数据库的程序,都可以在它的英文官方网站下载到,但是,鉴于不不是所有人的英文都很好,所以建议大家尽量区MySQL的中文官方网站下载自己所需的程序,如果找不到,再去找英文的网站。
MySQL5有安装版和免安装版之分,顾名思义,安装版就是需要安装以后才可以使用;免安装版的MySQL下载下来之后就可以使用,或者进行简单的设置就可以使用。
MySQL5安装版下载地址:
Windows版本:http://download.mysql.cn/src/2006/0218/199.html
Linux版本(源码包):http://download.mysql.cn/src/2006/0208/62.html
MySQL5免安装版下载地址:
Windows版本:http://download.mysql.cn/src/2006/0302/205.html

三、 MySQL5安装
Windows版安装手册:http://bbs.mysql.cn/thread-261-1-1.html
Linux版本(源码包)安装手册:http://bbs.mysql.cn/thread-493-1-2.html

MySQL有安装版本和免安装版本,免安装版本解压后的文件夹内没有安装程序,可以直接使用。
Windows免安装版本使用手册:http://bbs.mysql.cn/thread-552-1-1.html

四、 备份与恢复
常规备份命令是mysqldump,这里以tm数据库为例,做简单介绍,详细资料参考
http://info.mysql.cn/install/2006/0410/5521.html
备份:
#mysqldump -u root -p tm > tm_20060101.sql
按提示输入密码,这就把tm数据库所有的表结构和数据备份到tm_20060101.sql了,因为要总进行备份工作,如果数据量大会占用很大空间,
这是可以利用gzip压缩数据,命令如下:
#mysqldump -u root -p tm | gzip > tm_20060101.sql.gz
还可以备份到远程机器,用-h制定,如
#mysqldump -u root -p tm > tm_20060101.sql -h xxx.xxx.xxx.xxx
可以直接备份到IP地址为xxx.xxx.xxx.xxx的远程计算机。
系统崩溃,重建系统,或恢复数据库时,可以这样恢复数据:
#mysql -u root -p tm < tm_20060101.sql
从压缩文件直接恢复:
#gunzip < tm_20060101.sql.gz | mysql -u root -p tm

五、 FAQ

Q:为什么我下在的“安装程序”里面没有安装文件?
A:你下载的可能是免安装版本。请给出详细的版本信息。

Q:如何启动和关闭mysql?
A:linux下:比如我的mysql是用源码方式安装在/usr/local/mysql
自动:将/usr/local/mysql/share/mysql/mysql.server拷贝到/etc/rc.d/init.d/下,然后
chkconfig --add mysql.server就可以开机就启动mysql服务了。
手动:以root身份执行/usr/local/mysql/bin/mysqld_safe --user=mysql
windows下:
自动:
用cmd方式,到mysql安装路径的bin文件夹下,执行:mysqld-nt --install
手动:直接到到mysql安装路径的bin文件夹下执行net start mysql即可。
如果不想让mysql在计算机启动时候就启动服务,执行:mysqld-nt --remove
也可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中删除对应服务并重启计算机。
关闭mysql:mysqladmin -uroot -p shutdown
启动mysql:
mysqld-nt --install
net start mysql

Q:如何修改mysql的用户密码?
A :在这里请区分连接mysql数据库的用户密码和系统的用户密码!!

mysql -uroot -p
输入密码
#登录mysql
>use mysql
>update user set password=password("new_pass") where user="userName"; #userName换成你要修改的用户名的密码,比如root
>flush privileges;
>exit;

Q:如何登录mysql?
A:mysql -uroot -p回车后,输入密码,再回车即可。如果自己没有修改的话,默认密码为空。

Q:mysql如何很好的变成图形化数据库呢?自身有自带的图形化工具没有?
A:mysql自带一个字符的客户端,但是还有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query Browser,Mysql Administrator、mysqlcc这样好的图形管理工具。
mysql_centerd在本站的下载地址:http://bbs.mysql.cn/thread-517-1-1.html
SQLyog去网上搜索,很多的,SQLyog407版本不错。
phpMyAdmin下载地址:http://download.mysql.cn/opencode/2006/0207/55.html
mysql.com提供的管理软件下载地址:http://dev.mysql.com/downloads/gui-tools/5.0.html
其它的我就不一一提供下载地址,自己到网上搜索下载。

Q:为什么用mysql -uusername -p登录mysql服务器时出现如下提示:
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server!("xxx.xxx.xxx.xxx"代表要登录的服务器)
A:这是因为你要登录的mysql服务器不允许用户username从xxx.xxx.xxx.xxx这个ip地址登录。
解决办法是在服务器登录mysql,操作步骤为:
mysql -uroot -p
(输入密码)
use mysql
update user set Host="%" where User="username";
flush privileges;

Q:什么是phpMyAdmin?
A:phpMyAdmin 是一个用PHP编写的,可以通过互联网控制和操作MySQL。通过phpMyAdmin可以完全对数据库进行操作,例如建立、复制/删除数据等等。
有了phpMyAdmin 就可以完全不使用mysql命令,直接使用phpMyAdmin就能管理mysql的所有数据和数据库

Q:如何使用phpMyAdmin?
A:要使用phpMyAdmin,下载后,把它释放到web服务器的根目录下,取个名字,比如就叫phpMyAdmin,然后在浏览器的地址栏输入:
http://X.X.X.X/phpMyAdmin/index.php
就可以了。
如果是phpMyAdmin 2.8.0.2以上版本的,这样使用会报错,因为默认没有这个软件需要的配置文件config.default.php,在2.6.X版本下都有这个文件,只是口令不对。对于2.6.X版本的,可以直接用文本编辑器打开这个文件,把其中第一个$cfg中内容修改成自己的用户名及密码就可以了:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = '自己的密码';
不设置密码的话,系统会提示:
Access denied for user 'root'@'localhost' (using password: NO)

如果是2.8.0.2版本的,程序会提示请运行scripts/setup.php或者index.php这样的文件进行配置以生成config.inc.php文件。

Q:为什么我使用mysql出现乱码?
A:安装mysql5时默认的字符集是瑞典编码latin1,不支持中文。并且出现乱码的原因很多,建议到bbs.mysql.cn论坛寻找答案。发贴的话请详细说明自己的环境、安装过程及使用的信息,以便大家能快速分析你的问题。

Q:如何修改字符集?
A:
mysql -uroot -p
输入密码
选择你的目标数据库
mysql> use dbname
显示当前字符集
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
最好是保持字符集统一。如果你要修改哪个字符集,用set命令,如:
mysql> set character_set_client gbk;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
再改回来:
mysql> set character_set_client=gb2312;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
自己试试就知道了。

Q:为什么我的phpmyadmin提示不能载入mysql扩展?
A: 一、看下你的PHP目录和PHP\EXT下有没有php_mysql.dll这个文件。
二、配制一下环境变量把php_mysql.dll所在的目录加入的PATH里。
三、有的php安装程序安装好以后,在安装路径下,并没有ext文件夹(不知道为什么),最好下载个配置的php,然后,将exe文件夹拷贝到安装目录下,再进行相应的配置。
四、看一下c:\winnt 或者是 c:\windows下的php.ini文件里的php_mysql.dll前面的;(分号)是否去掉了,如果没有去掉请去掉,然后,将mysql安装路径下bin文件夹下的libmysql.dll放在安装php的根目录一般为C:\php ,同时也在 C:\windows 下也放各一个,之后重新启动IIS或者是APACHE。有的时候总是刷新一页,即使去掉分号也还是不能载入mysql扩展,最后新打开一个窗口,再试。

Q:为什么提示:"没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果."
A:因为你没有打开mbstring在扩展,解决办法:打开php的配置文件php.ini,将
extension=php_mbstring.dll前面的分号";"去掉,并改到正确的路径,一般为
ext/php_mbstring.dll

Q:为什么PHP连接mysql会有下面的提示?
Fatal error: Call to undefined function mysql_connect() ……
A:很有可能是没有载入mysql扩展,如何解决,请参考上面的方法。
因为如果你的系统没有载入mysql扩展的话,phpmyadmin能给出提示,而一般的程序则不能给出。
如果phpmyadmin没有给出提示,而你恰好用的apache服务器,尝试一下方法:
首先是去掉;extension=php_mysql.dll前面的“;”(;为注释)
第二步是将C:\php\ext中的php_mysql.dll复制到C:\WINDOWS(C:\WINNT)中即可,
并重起Apache。

Q:为什么我不能看孵化池资料?
A:MYSQL.CN的孵化池是专门为初学者提供学习的地方,这里我就不多介绍了,详情请访问:http://bbs.mysql.cn/thread-369-1-1.html。

Q:能中文数据库名称么?
A:可以,但是不推荐,用起来不方便。

Q:如果我忘记了root密码,怎么办?
A:
在windows下:
打开命令行窗口,停止mysql服务: Net stop mysql
启动mysql,一般到mysql的安装路径,找到 mysqld-nt.exe
执行:mysqld-nt --skip-grant-tables
另外打开一个命令行窗口,执行mysql
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
>exit
用Ctrl+Alt+Del,找到mysqld-nt的进程杀掉它,在重新启动mysql-nt服务,就可以用新密码登录了

在linux下:
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL 。

Q:为什么出现如下的提示:
[root@0-8-2-df-fa-ee ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
注:也可能是其它路径下的mysql.sock
A:说明mysql服务没有启动,mysql.sock是mysql服务启动后启动生成的文件,
一般先杀掉mysql服务:killall mysql
然后,再根据自己的安装情况启动mysql即可。比如,安装的时候,用的是
./configure --prefix=/usr/local/mysql的
用下面的命令启动:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
之后再去执行/usr/local/mysql/bin/mysql -u root -p 登录进入mysql数据库
还不行的话,一次执行下面的命令:
sync
reboot ;重启计算机,执行时请小心!!!

Q:为什么出现下面的错误
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

A:你使用的数据库是4.1以上,用命令行连接MySQL数据库后,执行下面的命令:
UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;
即可解决。

your_password:改成你连接数据库的密码,比如 123
your_host:改成你连接数据库的主机,如果是本地的话,就是localhost
your_username:改成你连接数据库的用户,比如 root

Q:为什么mysql提示我:Data too long for column ……
A:首先确保你的数据大小符合你的字段大小。
再检查你的数据库编码,数据库的编码是否与操作数据库工具的编码一致!

标签: