小谈MySQL字符集

想白手起家o

想白手起家o

2016-02-19 21:23

今天给大家分享的是由图老师小编精心为您推荐的小谈MySQL字符集,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

  首先,这片文章纯粹是我的个人经验之谈,适用于我常见的环境及项目中.

  个人建议,数据库字符集尽量使用utf8(HTML页面对应的是utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上可能无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.

  接下来是完整的一个例子:

  1.创建数据库表

  mysqlCREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

  #注意后面这句话 "COLLATE utf8_general_ci",大致意思是在排序时根据utf8校验集来排序

  #那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了

  mysqlcreate table my_table (name varchar(20) not null default '')type=myisam default charset utf8;

  #这句话就是创建一个表了,制定默认字符集为utf8

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  2.写数据

  例子1是通过php直接插入数据:

  a.php
?php
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
  //请注意,这步很关键,如果没有这步,所有的数据读写都会不正确的
//它的作用是设置本次数据库联接过程中,数据传输的默认字符集
//其他编程语言/接口也类似,例如 .net/c#/odbc
//jdbc则设置连接字符串为类似"jdbc:mysql://localhost/db?user=user&password=123456&useUnicode=true&characterEncoding=UTF-8"
  mysql_query("set names utf8;");
//必须将gb2312(本地编码)转换成utf-8,也可以使用iconv()函数
mb_convert_encoding("insert into my_table values('测试');", "utf-8", "gb2312");

  例子是通过页面提交插入数据2:

  b.php
?php
//输出本页编码为utf-8
header("content-type:text/html; charset=utf-8");
  mysql_connect('localhost','user','password');
mysql_select_db('my_db');
  mysql_query("set names utf8;");
if(isset($_REQUEST['name'))
{
//由于上面已经指定本页字符集为utf-8了,因此无需转换编码
mysql_query(sprintf("insert into my_table values('%s');", $_REQUEST['name']));
}
  $q = mysql_query("select * from my_table");
while($r = mysql_fetch_row($q))
{
print_r($r);
}

  meta http-equiv="Content-Type" content="text/html; charset=utf-8"
form action="" method="post"
input type="text" name="name" value=""
input type="submit" value='submit'
/form

  自此,使用utf8字符集的完整的例子结束了.

  如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,例如:

  create table my_table ( name varchar(20) binary not null default '')type=myisam default charset latin1;

  附1:旧数据升级办法

  以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)。

  第一步:导出旧数据

  mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table old.sql

  第二步:转换编码(类似unix/linux环境下)

  iconv -t utf-8 -f gb2312 -c old.sql new.sql

  或者可以去掉 -f 参数,让iconv自动判断原来的字符集

  iconv -t utf-8 -c old.sql new.sql

  在这里,假定原来的数据默认是gb2312编码。

  第三步:导入

  修改old.sql,在插入/更新语句开始之前,增加一条sql语句:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  "SET NAMES utf8;"

  ,保存。

  mysql -hlocalhost -uroot my_db new.sql

  大功告成!!

  附2:支持查看utf8字符集的MySQL客户端有

  1.) MySQL-Front,据说这个项目已经被MySQL AB勒令停止了,不知为何,如果国内还有不少破解版可以下载(不代表我推荐使用破解版 :-P)。

  2.) Navicat,另一款非常不错的MySQL客户端,汉化版刚出来,还邀请我试用过,总的来说还是不错的,不过也需要付费。

展开更多 50%)
分享

猜你喜欢

小谈MySQL字符集

编程语言 网络编程
小谈MySQL字符集

MySQL字符集

编程语言 网络编程
MySQL字符集

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

HTML 字符集

Web开发
HTML 字符集

mysql 字符集的系统变量说明

编程语言 网络编程
mysql 字符集的系统变量说明

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL 4.1 字符集支持的原理

MySQL mysql数据库
MySQL 4.1 字符集支持的原理

MySQL 存储过程的字符集问题

编程语言 网络编程
MySQL 存储过程的字符集问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何解决Win7系统下QQ来消息是PPS酷狗播放器声音变小的问题

如何解决Win7系统下QQ来消息是PPS酷狗播放器声音变小的问题

win7删除文件时提示权限不对怎么办

win7删除文件时提示权限不对怎么办
下拉加载更多内容 ↓