连接 MySQL
由于本文要采用命令行、图形界面两种方式进行操作演示,所以针对命令行,我们需要先连接 MySQL。
先定位到 MySQL 的 bin 目录:
cd D:\phpstudy_pro\Extensions\MySQL5.5.29\bin
连接 MySQL:
mysql -u root -p
-u root 就是说以 root(最高权限者)连接,-p 就是待会儿按提示输入密码。
由于我们是使用 PHPStudy 安装的,所以这个密码,我们是可以在 PHPStudy 中轻松修改的。
常见参数:
-h,host,比如 localhost,本机可省略。
-P,Port,注意为了与 password 区别,是大写,3306 可省略。
-u,user,用户名。
-p,password,密码。
说明:
-h,-P,-u 后面空格可要可不要,比如 -u root 等效于 -uroot;-p 后面则不能有空格作为间隔,因为它会将空格当成密码的一部分。
-p 后面不跟密码,表示一会儿输入密码(显示为星号);也可以直接将密码跟在这里。
创建数据库
创建默认“字符集”和“字符集校对”的数据库
连接 MySQL 后,界面如下:
mysql>_
可以在这里使用 SQL create database 来创建数据库,如下:
create database test;
test 是我们的数据库名称,SQL 语句以分号结束,如果忘打分号了也没关系,MySQL 会下一行让我们继续输,我们在这里输入分号就可以了。
查看“字符集”和“字符集校对”
我认为 MySQL 有两个东西比较麻烦,一个是版本兼容性,另一个就是这个东西,所以有必要说一下。
show create database test;
show create database,又是 show,又是 create 的,很多人可能不适应,这里可以这样理解:我现在有个数据库 test,假如我想创建一个一样的数据库,使用什么 SQL 语句呢?于是加个 show 吧。结果如下:
注意:窗口太小的话,在窗口的标题栏上右键 -> 属性,可将其调大点。
看起界面有点乱,但其实 MySQL 是想输出一个 2x2 表格:
第 1 行是表头;
第 1 列是 Database 的名称,第 2 列是创建数据库的 SQL 语句。
我们可以看到字符集是 utf8,字符集校对是 utf8_unicode_ci。注意:如果是 utf8_general_ci,则不会显示字符集校对。
图形界面的话,在 MySQL-Front 中右键 -> 属性,即可看到:
创建指定“字符集”和“字符集校对”的数据库
根据前面的 show create database(MySQL-Front 的话,是在属性的“源代码”标签中,如上图),我们可在创建数据库时这样写:
CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci */;
说明:
数据库名称旁边两撇,是键盘 ~ 下面那个,可不是(也不能是)单引号。当然也是可以省略的。
/*! 可不是注释,在 MySQL 中,/* 后面多一个 ! 是有特殊意义的,在其他语句。
修改指定“字符集”和“字符集校对”的数据库
alter database `test` default character set utf8 collate utf8_general_ci;
说明:
这是修改默认的,如果之前已经导入了数据,这些数据的字符集、字符集校对 是不变的(搞这么复杂干嘛)。
表的字符集、字符集校对也是可以修改的。
导入 SQL
在 MySQL 体系下,要把数据库从 A 搬到 B,通常是生成一个 SQL 脚本。
怎样导入这个 SQL 呢?
接上面的操作,咱们先 Ctrl + C(或使用 exit 命令)退出 MySQL,然后执行如下命令:
mysql -u root -p test < D:\test.sql
这个 < 符号很重要。
说明:这里不是 SQL 语句,而是命令,所以不以分号结尾噢。
导出 SQL
反过来是使用 mysqldump。
mysqldump -u root -p test > D:\test.sql
一是换了命令,二是 < 变成了 >。
打开导出的 SQL 文件,我们是可以看到字符集相关内容的。
字符集校对不一样会怎样?
说了半天,字符集校对不一样会怎样?举例:
表 A 是 utf8_general_ci,表 B 是 utf8_unicode_ci,当使用 join 查询时,可能会遇到如下的错误:
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
网上说 utf8_general_ci 快,但准确性稍差,utf8_unicode_ci 则相反,我不知道是否正确。