MySQL小贴士

1.创建数据库时,一定要设置字符编码格式

刚开始的使用mysql的小白(比如博主),经常会碰到这样的情况,将中文存入数据库后显示的都是??,而且长度相同的中文就unique字段就会提示:duplicate(重复了)。WTF?到底发生了什么?
以上就是博主从windows平台切到mac后,开始配置mysql环境时碰到的问题。花了几个晚上的时间,搜索stackoverflow等境外网站,在代码中创表时加上各种设置字符集的方法,还有修改电脑的本地配置文件,设置了一堆,愣是没有解决。。
后来是被公司的倩神(纯爷么)一语惊醒:你数据库字符集设了没有?。。。。。。。。。我瞬间想到stackoverflow上的一个回答。。就是创建数据库时设置字符集的方法,当时看到了,但也仅仅是看到,就直接忽略过去(也有原因是英文的,没完全懂)。
真的想哭,不多说了,上mysql命令。

(1)如果你是新创建数据库,可以使用一下方式设置

1
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE utf8_general_ci;

(2)如果你的数据库已经创建了,可以通过修改字符集的方式解决(不推荐,可能会引发不明确的问题)

1
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;

2.mysql数据库中的数据是可以被dump出来,随处恢复的

就拿我所在的项目组来说吧,如果你要对系统进行流程测试。之前的做法是:初始化初始数据-》使用excel表格导入各种数据到系统中-》然后再开始测试。这样做有三个缺点:1.效率低;2.excel表格需要具有一致性,若某些数据被修改过,会导入失败;3.数据量小,无法完全暴露问题。
现在有了dump神器,可以将某些客户的现场数据dump出来(当然,用户数据是不会外泄的,只是测试,只是测试,只是测试),直接在数据库中进行恢复。
dump的方法如下:

1
2
3
time=$(date +%Y-%m-%dT%H:%M:%S)
mysqldump -h <服务器地址> -P <端口号> -u <用户名> -p<密码> <数据库名> > $time.dump
ps:本地可以不填服务器地址,但是端口号要填,默认是3306(如果不填,dump命令会阻塞,ctrl-C 无法退出)

恢复方法如下:

1
mysql -h <服务器地址> -P <端口号> -u <用户名> -p <数据库名称> < mysql.dump

3. 在mysql中如何复制一行数据,同时使用新的id插入到数据库中

具体当时为什么需要这个功能,博主已经忘了,直接上命令

1
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

4.在mac上,python代码连接MySQL时,提示No module named MySQLdb,怎么解决

这个问题,你需要确认两件事。
(1)代码中数据库连接的url需要特殊设置

1
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://.....'

(2)需要安装python中操作mysql的库

1
pip install mysql-python

5.安装mysql5.7.1的坑

5.6以前的MySQL安装后,默认是没有密码的,第一次登录时设置密码。这是博主一贯以为的。但是在mac上安装5.7.1时,遇到了坑。因为新的版本中,密码是安装过程中弹窗告诉我们的。而当时,博主并没有关系什么弹窗,直接没看就关闭了。导致第一次登录一直提示密码错误。
后来在网上某个csdn博客中讲到了这一点。然后博主就滚回去重装了。

6.其他一些常用的命令

查看表的结构:show create table 表名;
删除一行特定数据行:delete from 表名 where id = 1;

参考:
1.mysql-copy-row-but-with-new-id
2.No module named MySQLdb