三、字符集
对于新手来说,字符集乱码问题无疑是头痛的问题,小编就带你不在头痛,从此幸福。
1、字符集简介:
字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。简单的说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASC2,MySQL数据库字符集包括字符集和校对规则两个概念,字符集是定义数据库里面的内容字符串的存储方式,而校对规则是定义比较字符串的方式。
建议:中英文环境选择utf8
2、查看设置字符集
# 查看MySQL字符集设置情况 show variables like 'character_set%'; # 查看库的字符集 show create database db; # 查看表的字符集 show create table db_tb\G # 查询所有 show collation; # 设置表的字符集 set tables utf8; show create database nick_defailt\G #查看nick_defailt库字符集 mysql -uroot -p -e "SHOW CHARACTER SET;" show variables like 'character_set%'; mysql> show variables like 'character_set%'; +-----------------------------------------+------------------------------------------------------------+ | 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 | /usr/local/mysql/share/mysql/charsets/ | +----------------------------------------+--------------------------------------------------------------+ 8 rows in set (0.00 sec) mysql> show create database nick_defailt \G *************************** 1. row *************************** Database: data Create Database: CREATE DATABASE `data` /*!40100 DEFAULT CHARACTER SET utf8 */ 1 row in set (0.00 sec) |
3、MySQL数据乱码及解决方法
1> 系统方面 cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8" 2> 客户端(程序),调整字符集为latin1。 mysql> set names latin1; #临时生效 Query OK, 0 rows affected (0.00 sec) #更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。 [client] default-character-set=latin1 #无需重启服务,退出登录就生效,相当于set name latin1。 3> 服务端,更改my.cnf参数 [mysqld] default-character-set=latin1 #适合5.1及以前版本 character-set-server=latin1 #适合5.5 4> 库、表、程序 #建表指定utf8字符集 mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec) |
4、将utf8字符集修改成GBK字符集的实际过程
1> 导出表结构 #以utf8格式导出 mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql --default-character-set=gbk #表示已GBK字符集连接 –d 只表示表结构 2> 编辑alltable.sql 将utf8改成gbk。 3> 确保数据库不在更新,导出所有数据 mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql 4> 打开alldata.sql将set name utf8 修改成 set names gbk(或者修改系统的服务端和客户端) 5> 建库 create database oldsuo default charset gbk; 6> 创建表,执行alltable.sql mysql -uroot -p oldsuo <alltable.sql 7> 导入数据 mysql -uroot -p oldsuo <alltable.sql |
四、存储引擎
MySQL最常用存储引擎Myisam和Innodb。mysql 5.5.5以后默认存储引擎为Innodb。
MySQL的每种引擎在MySQL里是通过插件的方式使用的,MySQL可以支持多种存储引擎。
建议:使用 Innodb引擎,因为支持回滚,后续博客会讲。
1、引擎对应系统文件
1) MyISAM引擎系统库表对应文件 [root@mysql 3306]# ll /data/3306/data/mysql/ -rw-rw----. 1 mysql mysql 10630 10月 31 16:05 user.frm #保存表的定义 -rw-rw----. 1 mysql mysql 1140 10月 31 18:40 user.MYD #数据文件 -rw-rw----. 1 mysql mysql 2048 10月 31 18:40 user.MYI #索引文件 [root@mysql 3306]# file data/mysql/user.frm data/mysql/user.frm: MySQL table definition file Version 9 [root@mysql 3306]# file data/mysql/user.MYD data/mysql/user.MYD: DBase 3 data file (167514107 records) [root@mysql 3306]# file data/mysql/user.MYI data/mysql/user.MYI: MySQL MISAM compressed data file Version 1 2) InnoDB引擎 [root@mysql 3306]# ll data/ -rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata1 |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。