iLeichun

当前位置:首页

Java中List接口用法入门

分类:个人日志  来源:网络  时间:2011-1-20 23:20:59

import java.util.List;
import java.util.LinkedList;
import java.util.ArrayList;

public class ListTest_1{
 public static void main(String[] args){

  System.out.println("The class is to test java.util.List; ");
  List li=new LinkedList();
  //List li=new ArrayList();
  li.add("a");
  li.add("b");
  li.add("c");
  li.add("d");
  li.add("e");
  li.add("f");
  li.add(1,"1");
  //li.add(9,"2");该写法错误,不存在第9个位置
  //取得元素总个数
  System.out.println("The size of element is: "+li.size());
  //取得第一个元素
  System.out.println("The first element is: "+li.get(0)+" ");

  System.out.println("All of the element is:");
  for(int i=0;i<li.size();i++){
   System.out.println("Element "+i+": "+li.get(i));
  }

 }
/*
运行结果
The class is to test java.util.List;

The size of element is: 7
The first element is: a

All of the element is:
Element 0: a
Element 1: 1
Element 2: b
Element 3: c
Element 4: d
Element 5: e
Element 6: f
*/
}

Java中把Date类型转换成Long类型

分类:个人日志  来源:网络  时间:2011-1-20 23:10:25

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class TimeToLong {

 /**
  * @param args
  */
 public static void main(String[] args) throws ParseException{
  // TODO Auto-generated method stub
  Date d=new Date();
  long t=d.getTime();
  System.out.println(t);
  
  //将字符串类型转化成Date类型
  String s="2009-08-04 14:37:47";
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date d2=null;
  d2=sdf.parse(s);//将String to Date类型
  System.out.println(d2);
  
  long t3=d2.getTime();
  System.out.println(t3);
 }

}

PHP分页函数案例

分类:JQuery  来源:网络  时间:2011-1-19 9:24:09

<?php

/**

* @PHP分页类

*/

class page{

var $page_name=¹page¹; //数据名称

var $page_size; //每页显示条数

var $db;//数据库

var $page_num;//总页数

var $page=0; //当前页码

var $num; //数据总条数

 

/**

返回去除$page_name之后的查询字串

* @return unknown

*/

function getquery(){

   $query=$_SERVER[¹QUERY_STRING¹];

   //echo $query;

   //echo $this->page_name;

   //echo strripos($query,$this->page_name);

   //echo strpos($query,$this->page_name);

   if(empty($query)) return false;

   if(($end=strpos($query,$this->page_name)) !== false){

    if($end==0) $end=1;

    $query=substr($query,0,$end-1);

   }

   //echo $query;

   return $query;

}

 

/**

* Enter 取得分页数据

* @param unknown_type $sql

* @param unknown_type $db

* @param unknown_type $page_size

* @return array;

*/

function getData($sql,$db,$page_size=20){

   $this->page_size=$page_size;

   if(strripos($sql,¹limit¹) != false)die(¹SQL中不可出现limit¹);

   if($page_size<=0)die(¹$page_size设置错误¹);

   $sql=trim($sql);

   $this->num=$db->getnum($sql);

   if($this->num<=$page_size){

    $this->page_num=0;

   }else{

    $this->page_num=ceil($this->num/$page_size)-1;

   }

   if(empty($_GET[$this->page_name]) || $_GET[$this->page_name] <0 ){

    $this->page=0;

   }elseif($_GET[$this->page_name] > $this->page_num){

    $this->page=$this->page_num;

   }else{

    $this->page=$_GET[$this->page_name];

   }

   $sql.=¹ limit ¹.($this->page*$page_size).¹,¹.$page_size;

   $row=$db->getall($sql);

   //echo $sql;

   return $row;  

}

 

/**

输出分页链接

* @return unknown

*/

function pagelist(){

   $query=$this->getquery();

   if(empty($query)){

    $query=¹¹;

   }else{

    $query=$query.¹&¹;

   }

   $total=¹总共¹.$this->num.¹条 每页¹.$this->page_size.¹¹;

   $startpage=¹<a href="?¹.$query.$this->page_name.¹=0">首页</a>¹;

   $endpage=¹<a href="?¹.$query.$this->page_name.¹=¹.$this->page_num.¹">尾页</a>¹;

   if($this->page==0){

    $prepage=¹上一页¹;

   }else{

    $prepage=¹<a href="?¹.$query.$this->page_name.¹=¹.($this->page-1).¹">上一页</a>¹;

   }

   if($this->page==$this->page_num){

    $nextpage=¹下一页¹;

   }else{

    $nextpage=¹<a href="?¹.$query.$this->page_name.¹=¹.($this->page+1).¹">下一页</a>¹;

   }

   return $total.¹ ¹.$startpage.¹ ¹.$prepage.¹ ¹.$nextpage.¹ ¹.$endpage;

}

  

?>

JQuery常用操作,JQuery常用技巧

分类:JQuery  来源:网络  时间:2011-1-19 9:17:11

1jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0]$("div").eq(1)[0]$("div").get()[1]$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;


2、关于页面元素的引用
通过jquery$()引用元素包括通过idclass、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eqget(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个<div>元素的内容。有如下两种方法:
$("div").eq(2).html();    //调用jquery对象的方法
$("div").get(2).innerHTML; //调用dom的方法属性

4、同一函数实现setget
Jquery中的很多方法都是如此,主要包括如下几个:
$("#msg").html();    //返回idmsg的元素节点的html内容。
$("#msg").html("<b>new content</b>");
//<b>new content</b>” 作为html串写入idmsg的元素节点内容中,页面显示粗体的new content

$("#msg").text();    //返回idmsg的元素节点的文本内容。
$("#msg").text("<b>new content</b>");
//<b>new content</b>” 作为普通文本串写入idmsg的元素节点内容中,页面显示<b>new content</b>

$("#msg").height();    //返回idmsg的元素的高度
$("#msg").height("300"); //idmsg的元素的高度设为300
$("#msg").width();    //返回idmsg的元素的宽度
$("#msg").width("300"); //idmsg的元素的宽度设为300

$("input").val("); //返回表单输入框的value
$("input").val("test"); //将表单输入框的value值设为test

$("#msg").click(); //触发idmsg的元素的单击事件
$("#msg").click(fn); //idmsg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法

5、集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
$("p").each(function(i){this.style.color=[¹#f00¹,¹#0f0¹,¹#00f¹][ i ]})
//为索引分别为012p元素分别设定不同的字体颜色。

$("tr").each(function(i){this.style.backgroundColor=[¹#ccc¹,¹#fff¹][i%2]})
//实现表格的隔行换色效果

$("p").click(function(){alert($(this).html())})   
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

6、操作元素的样式
主要包括以下几种方式:
$("#msg").css("background");    //返回元素的背景颜色
$("#msg").css("background","#ccc") //设定元素背景为灰色
$("#msg").height(300); $("#msg").width("200"); //设定宽高
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式
$("#msg").addClass("select"); //为元素增加名称为selectclass
$("#msg").removeClass("select"); //删除元素名称为selectclass
$("#msg").toggleClass("select"); //如果存在(不存在)就删除(添加)名称为selectclass


7、扩展我们需要的功能
$.extend({
min: function(a, b){return a < b?a:b; },
max: function(a, b){return a > b?a:b; }
}); //jquery扩展了min,max两个方法
使用扩展的方法(通过$.方法名调用):
alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));

8、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
例如:
$("p").click(function(){alert($(this).html())})
.mouseover(function(){alert(¹mouse over event¹)})
.each(function(i){this.style.color=[¹#f00¹,¹#0f0¹,¹#00f¹][ i ]});

9、完善的事件处理功能
Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。
如:
$("#msg").click(function(){alert("good")}) //为元素添加了单击事件
$("p").click(function(i){this.style.color=[¹#f00¹,¹#0f0¹,¹#00f¹][ i ]})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
1hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
//当鼠标放在表格的某行上时将class置为over,离开时置为out
$("tr").hover(function(){
$(this).addClass("over");
},
function(){
$(this).addClass("out");
});
2ready(fn):DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
$(document).ready(function(){alert("Load Success")})
//页面加载完毕提示Load Success,相当于onload事件。与$(fn)等价
3toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
//每次点击时轮换添加和删除名为selectedclass
$("p").toggle(function(){
   $(this).addClass("selected");
},function(){
   $(this).removeClass("selected");
});
4trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:
$("p").trigger("click");    //触发所有p元素的click事件
5bind(eventtype,fn)unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。
例如:
$("p").bind("click", function(){alert($(this).text());}); //为每个p元素添加单击事件
$("p").unbind(); //删除所有p元素上的所有事件
$("p").unbind("click") //删除所有p元素上的单击事件

10、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie$.browser.isie,是ie浏览器则返回true
$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。

$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); });
等价于:
var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
alert("Item #"+i+": "+tempArr[ i ]);
}
也可以处理json数据,如
$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });
结果为:
Name:name, Value:John
Name:lang, Value:JS
$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。
如:
$.extend(settings, options);
//合并settingsoptions,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。
var settings = $.extend({}, defaults, options);
//合并defaultsoptions,并将合并结果返回到setting中而不覆盖default内容。
可以有多个参数(合并多项并返回)
$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。
如:
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });
tempArr内容为:[4,5,6]
var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });
tempArr内容为:[2,3]
$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。
如:$.merge( [0,1,2], [2,3,4] ) //返回[0,1,2,3,4]
$.trim(str):删除字符串两端的空白字符。
如:$.trim("   hello, how are you? "); //返回"hello,how are you? "

11、几个实用特效功能
其中toggle()slidetoggle()方法提供了状态切换功能。
toggle()方法包括了hide()show()方法。
slideToggle()方法包括了slideDown()slideUp方法。

12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")
如:
jQuery.noConflict();
// 开始使用jQuery
jQuery("div p").hide();
// 使用其他库的 $()
$("content").style.display = ¹none¹;

java产生随机数

分类:Java  来源:网络  时间:2011-1-16 2:12:49

Java 中,java.util.Random类有两种形式的构造函数,分别是Random()Random(long seed)Random()使用当前时间作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。

        随机数发生器(Random)对象产生以后,通过调用不同的methodnextInt()nextLong()nextFloat()nextDouble()等获得不同类型随机数。

       1.生成随机数
           Random random = new Random();
           Random random = new Random(100);//指定种子数100
           random调用不同的方法,获得随机数。
           如果2Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同
          import java.util.*;
          class TestRandom {
                public static void main(String[] args) {
                     Random random1 = new Random(100);
                     System.out.println(random1.nextInt());
                     System.out.println(random1.nextFloat());
                     System.out.println(random1.nextBoolean());
                     Random random2 = new Random(100);
                     System.out.println(random2.nextInt());
                     System.out.println(random2.nextFloat());
                     System.out.println(random2.nextBoolean());
                }
            }

        2.指定范围内的随机数
             随机数控制在某个范围内,使用模数运算符%
            import java.util.*;
                 class TestRandom {
                      public static void main(String[] args) {
                           Random random = new Random();
                           for(int i = 0; i < 10;i++) {
                               System.out.println(Math.abs(random.nextInt())%10);
                           }
                      }
                 }
             获得的随机数有正有负的,用Math.abs使获取数据范围为非负数

       3.获取指定范围内的不重复随机数
            import java.util.*;
            class TestRandom {
                  public static void main(String[] args) {
                       int[] intRet = new int[6];
                       int intRd = 0; //存放随机数
                       int count = 0; //记录生成的随机数个数
                       int flag = 0; //是否已经生成过标志
                       while(count<6){
                            Random rdm = new Random(System.currentTimeMillis());
                            intRd = Math.abs(rdm.nextInt())%32+1;
                            for(int i=0;i<count;i++){
                                if(intRet[i]==intRd){
                                    flag = 1;
                                    break;
                                }else{
                                    flag = 0;
                                }
                            }
                            if(flag==0){
                                intRet[count] = intRd;
                                count++;
                            }
                   }
                  for(int t=0;t<6;t++){
                      System.out.println(t+"->"+intRet[t]);
                  }
               }
            }

php接口入门,php接口入门实例(原创)

分类:PHP  来源:网络  时间:2011-1-15 15:22:46

<?php
 /**
  * PHP接口和Java接口很类似,接口可以实现多个
  * 在这里我们来开始学习PHP接口的使用,以一个最简单的Hello World实例分三步进行说明
  * 面向接口编程具有以下特点:1.更加抽象,更加面向对象;2.提高编程的灵活性;3.提高可维护性
  * 这里我只实现一个接口,实现多个接口的方法类似
  */

 /**
  * 第一步:定义接口,接口里面的方法不用具体实现
  */
 interface Isay {  
     public function say();  
 }  
  
 /**
  * 第二步:定义实现接口的类,要实现接口里面的全部方法
  */
 //定义Hello类
 class Hello implements Isay{  
     public function say(){  
  echo "hello ";  
     }  
 }  
  
 //定义World类
 class World implements Isay{  
     public function say(){  
  echo "world!";  
     }  
 }  
 
 /**
  * 第三步:结果测试
  */
 /**
  * 注意以下调用方式是错误的,在Java里面可以这样写,但PHP里面会报错
  * Isay $var=new hello();
  * $var->say();
  */
 function test_say(Isay $isay){  
     $isay->say();  
 }  
  
 test_say(new Hello());    //输出:"hello "  
 test_say(new World());    //输出:"world!"

?>

原创文章,转载请说明来源:http://www.lession.net/blog/blogDetail.jsp?id=21

JAVA反射机制简介

分类:Java  来源:网络  时间:2011-1-15 0:51:32

      JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。   Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

     这么说吧,通常是类来实例化对象,但是反射就是你通过对象能得到到这个对象的类,并进行操作,再举个例子,一般是对象来调用方法,但是反射就是先得到这个对象的方法对象,在通过这个方法对象来调用这个对象的方法,如:要调用String类的charAt方法,反射就是这样做的:
    Method charAt = Class.forName("java.lang.String").getMethod("charAt",int.class);得到String类方法对象
    charAt.invoke(str,1); 通过这个方法对象调用str对象调用charAt方法;

Java接口分离原则案例

分类:Java  来源:网络  时间:2011-1-15 0:46:13
  1. //接口分离原则   
  2. interface Guest {   
  3.     // 这里定义浏览者只有查看权限   
  4.     void see();   
  5. }   
  6.   
  7. interface Master {   
  8.     //这里定义版主有查看和修改权限   
  9.     void see();   
  10.   
  11.     void change();   
  12. }   
  13.   
  14. interface Admin {   
  15.     //这里定义管理员有查看、修改和删除权限   
  16.     void see();   
  17.   
  18.     void change();   
  19.   
  20.     void delete();   
  21. }   
  22.   
  23. class CreateLimit implements Guest, Master, Admin {   
  24.     private CreateLimit() {   
  25.   
  26.     }   
  27.   
  28.     public static Guest user() {   
  29.         return (Guest) new CreateLimit();   
  30.     }   
  31.   
  32.     public static Master master() {   
  33.         return (Master) new CreateLimit();   
  34.     }   
  35.   
  36.     public static Admin admin() {   
  37.         return (Admin) new CreateLimit();   
  38.   
  39.     }   
  40.   
  41.     public void see() {   
  42.         System.out.println("你有查看权限");   
  43.     }   
  44.   
  45.     public void change() {   
  46.         System.out.println("你有修改权限");   
  47.   
  48.     }   
  49.   
  50.     public void delete() {   
  51.         System.out.println("你有删除");   
  52.   
  53.     }   
  54.   
  55. }   
  56.   
  57. public class Demo_20 {   
  58.     public static void main(String[] args) {   
  59.         Guest user = CreateLimit.user();   
  60.         user.see();   
  61.         System.out.println("-------------------------");   
  62.         Master master = CreateLimit.master();   
  63.         master.see();   
  64.         master.change();   
  65.         System.out.println("-------------------------");   
  66.         Admin admin = CreateLimit.admin();   
  67.         admin.see();   
  68.         admin.change();   
  69.         admin.delete();   
  70.     }   

再望2010,展望2011

分类:个人日志  来源:网络  时间:2010-12-31 23:16:42
365天就这样过去了,2010年过得很平淡,但也还充实。可惜又逢物价猛涨,昔日的金融危机刚过去,今朝仍是金融危机,似乎来得更危机。虽然没有看到盛大的世博与激情的亚运,但还是幸运地目睹了“嫦娥二号”即将消失在天空那一刹那的耀眼光芒。2009年在编程,2010年仍然在编程,有所不同的是2009年的网站访问覆盖范围小得可怜,2010年却覆盖了“七大洲四大洋”。
随着1月9日下午第一个php程序运行成功以来,一直团结在以php为核心的IT周围,以推动中国信息化建设,促进第三产业又好又快发展为目标。经过近一年的努力,完成了大大小小28个php项目,其中5个供测试研究用。虽然数学没学好,但对数字还是很感兴趣,经程序统计,一年里编写php文件共约1500个,代码总行数约130000行;另有css文件约300个,代码总行数约25000行;js文件约50个,代码总行数约5000行。
4月用jsp做了个人博客,Java文件24个,jsp文件近40个,代码总行数约5000行。与2009年相比,Java程序比例显著下降,php和Java呈现明显的“阴盛阳衰”局面,似乎有点悲哀,又似乎达到了一种平衡。
在毕业的那个学期,由于4月进行的综合测评中成绩突出,拿到了一等奖学金,算是一点安慰。还有值得一提的是,经过努力,在新增2000余个单词后,6月成功通过了英语四级,还算懂得点洋文了,做软件这东西不懂英文是不行的。看来这个学期的确很幸运,所谓“风水轮流转”貌似有点道理,但我还是不信类似的“神话”。
可惜的是有些之前经常做的事也没做过,没上过南普陀,没碰过海水……。不过也有点新鲜事,之前一直认为厦门的蚊子对我很友好,从来不咬我,认为“有朋自远方来,不亦悦乎”。但2010年有点意外,到了冬天还被蚊子咬过,却又开始把蚊子当“911”对待,做出了株连九族的决定。
仔细看来,似乎仰望了天空,但没脚踏实地,2010到底是怎么啦?
2011如何打算?计算机“管家”书写传奇……

MYSQL字符集

分类:MySQL  来源:网络  时间:2010-12-17 23:46:05

MySQL的字符集支持(Character Set Support)有两个方面:

     字符集(Character set)和排序方式(Collation)。

对于字符集的支持细化到四个层次:

     服务器(server),数据库(database),数据表(table)和连接(connection)。

1.MySQL默认字符集

MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?    (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;

    (2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

    (3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;

    (4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;

    (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;

    (6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

    (7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)

通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:

     mysql> SHOW VARIABLES LIKE character%;

+--------------------------+---------------------------------+

| Variable_name            | Value                           |

+--------------------------+---------------------------------+

| character_set_client     | latin1                          |

| character_set_connection | latin1                          |

| character_set_database   | latin1                          |

| character_set_filesystem | binary                    |

| character_set_results    | latin1                          |

| character_set_server     | latin1                          |

| character_set_system    | utf8                            |

| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

mysql> SHOW VARIABLES LIKE collation_%;

+----------------------+-----------------+

| Variable_name        | Value           |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database   | utf8_general_ci |

| collation_server     | utf8_general_ci |

+----------------------+-----------------+

3.修改默认字符集

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,

如    default-character-set = utf8

      character_set_server = utf8

   修改完后,重启mysql的服务,service mysql restart

   使用 mysql> SHOW VARIABLES LIKE character%;查看,发现数据库编码均已改成utf8

+--------------------------+---------------------------------+

| Variable_name            | Value                           |

+--------------------------+---------------------------------+

| character_set_client     | utf8                            |

| character_set_connection | utf8                            |

| character_set_database   | utf8                            |

| character_set_filesystem | binary                          |

| character_set_results    | utf8                            |

| character_set_server     | utf8                            |

| character_set_system     | utf8                            |

| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |

+--------------------------+---------------------------------+

   (2) 还有一种修改字符集的方法,就是使用mysql的命令

   mysql> SET character_set_client = utf8 ;

     mysql> SET character_set_connection = utf8 ;

     mysql> SET character_set_database = utf8 ;

     mysql> SET character_set_results = utf8 ;

     mysql> SET character_set_server = utf8 ;

     mysql> SET collation_connection = utf8 ;

     mysql> SET collation_database = utf8 ;

     mysql> SET collation_server = utf8 ;

一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES utf8;它相当于下面的三句指令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

总结:

因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.
 

  • 60
  • |<
  • <<
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • >>
  • >|