站内链接:

Encode and Decode

Introduction

emoji 是 unicode 编码,在正常情况 utf8 编码情况下是无法显示 emoji 表情,仅仅在 utf8mb4 编码下才支持,其中 utf8mb4 是 utf8 的超集;

PS: columns/table/database, 都可能因为编码不一致, 导致问题出现.

Show

  • 系统默认的字符集:SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’;
  • Database 的字符编码:SHOW CREATE DATABASE database_name;
  • Table 的字符编码:SHOW CREATE TABLE table_name;
  • Columns 的字符编码: show full columns from table_name;
  • 数据编码: show variables like ‘char%’;

SET

SQL Shell Command:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 确保编码的一致性
character-set-server=utf8
default-character-set=utf8
# 临时编码类型
SET character_set_results = utf8;(主要部分)

# 修改DB的字符编码:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# 修改TABLE的字符编码:
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 修改字符列编码(全部修改)
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 修改某一列的编码
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Mysql Configure:

1
2
3
4
5
# my.cnf文件, 默认配置
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4

Information

Table

1
2
3
4
# 显示当前数据库中所有的表格
show tables;
# 显示某个表格的详细信息
show create table table1;

DB

1
2
3
4
# 显示所有的数据库
show databases;
# 显示某个数据库的详细信息
show create database bamboo;

procedure

1
2
3
4
# 显示所有的存储过程
show procedure status;
# 显示某个存储过程的详细信息
show create procedure proctest1;

Function

1
2
3
4
# 显示所有的函数
show function status;
# 显示指定的函数的详细信息
show create function function1;

Event

1
2
3
4
# 显示所有的事件(系统,用户)
show variables like '%sche%';
# 显示指定的事件的详细信息
select * from mysql.event where name='event1';

CUDS

创建数据库

utf8 basic:CREATE DATABASE base1 DEFAULT character set utf8 COLLATE utf8_general_ci;

utf8mb4: create database xxx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Authority

用户权限影响到当前用户远程连接的成功与否, 显示权限相关命令如下:

1
2
3
4
5
6
Show: select user,host from mysql.user;
Delete: delete from mysql.user where user='django' and host='%';

# 查看某一个用户的权限
show grants for 'django'@'';
show grants for 'django'@'localhost';

创建用户并授予相应权限

1
2
3
4
5
6
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
其中:
1 如果用户地址为%,表示允许其他IP主机登录该mysql服务器,但是一般都是采用隧道ssh来进行连接
2 使用命令:select user,host from mysql.user来进行用户权限的查看。
# 创建用户并授予权限, 如果要指定多个表, 那只能一条条的执行下面的语句,
# 但是在终端仍旧没有过滤, 没有任何用途

example:

1
2
3
4
5
6
7
8
9
10
# 设置最新 DB 版本中密码的最低要求
set global validate_password_policy=0;
# 创建用户并赋予权限
grant all privileges on shop.* to 'shop'@'localhost' identified by 'shop@297413' with grant option;
# 刷新
flush privileges;

# 修改用户权限,确保django用户可以远程连接数据库django
grant all privileges on django.* to 'django'@'%' identified by 'django';
flush privileges;

Revoke: 权限变动

1
2
3
4
5
revoke 权限 on 数据库名.表名 from 用户名@登陆方式;

# 必须和授予保持一致, 变动的(revoke, from, 以及不需要其他选项)
revoke all on django.* from 'django'@'%';
revoke all on shop.* from 'shop'@'localhost';

Other Example

1
2
3
4
5
6
# 创建只读账户,用于数据库数据的查询操作
GRANT SELECT ON *.* TO 'ilife'@'127.0.0.1' IDENTIFIED BY 'xinshu123' with grant option;
flush privileges;

# 更改用户密码
UPDATE mysql.user set password=password("new password") where User="xinshu" and Host="localhost"

术语

DML 和 DDL

DDL: data definition language, 数据定义语言, 用于操作数据库对象, 例如表, 视图, 数据库, 相关命令如下:

1
2
3
4
5
6
CREATE      -- 创建表
ALTER -- 更改表结构
DROP -- 删除表或者其他结构
TRUNCATE -- 截断清空表并重置ID
COMMENT -- 添加注释
RENAME -- 重命名

DML: data manipulation language, 数据操作语言, 管理和操作数据库中的记录, 相关命令如下:

1
2
3
4
5
6
SELECT      -- 查询
INSERT -- 插入
UPDATE -- 更新
DELETE -- 删除
EXPLAIN -- 优化
LOCK -- 并发锁控制

DCL: data control language, 是一种可对数据访问权进行控制的指令, 控制特定用户账户对数据表, 查看表, 存储程序, 用户自定义函数等数据库对象的控制权, 相关命令如下:

1
2
GRANT       -- 给特定用户赋予访问指定数据库的指定权限
REVOKE -- 取消权限

TCL: transaction control, 控制和管理事务以维护 SQL 语句中数据的完整性, 相关命令如下:

1
2
3
BEGIN       -- 开始事务
COMMIT -- 提交事务
ROLLBACK -- 回滚事务

参考