1、新建数据库字符集和排序规则怎么选
字符集我选择utf8mb4,因为之前选择utf8出过问题
为什么要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等(utf8的缺点)。
随着互联网的发展,产生了许多新类型的字符,例如emoji这种类型的符号,也就是我们通常在聊天时发的小黄脸表情,这种字符的出现不在基本多平面的Unicode字符之中,导致无法在MySQL中使用utf8存储,MySQL于是对utf8字符进行了扩展,增加了utf8mb4这个编码。
排序规则我选择utf8mb4_general_ci
utf8mb4_bin:将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。
bin 是二进制, a 和 A 会别区别对待。例如你运行: select * from table where a = ‘a’;那么在utf8_bin中你就找不到 a = ‘A’ 的那一行, 而 utf8_general_ci 则可以.
utf8mb4_general_ci:ci即case insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。
2、建库/删库、插入字段语法
create database 数据库名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
create database 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
create database IF NOT EXISTS `数据库名` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE 数据库名 ;
desc dev_heroes.org_role; ## 查看表结构设计
Ctrl+D 退出mysql
exit 退出mysql
DROP DATABASE dev_heroes; 删除一个库
DROP TABLE dev_heroes.users; 删除一个表
alter table user_info add column score decimal(18,2) NOT NULL default 0.10 COMMENT '分数' AFTER age;
ALTER TABLE staff_info ADD COLUMN icon_path VARCHAR(255) DEFAULT NULL COMMENT '头像';
ALTER TABLE staff_info ADD COLUMN submit_time datetime DEFAULT NULL COMMENT '提交时间';
alter table staff_info add column state tinyint(1) NOT NULL COMMENT '状态 0-有效,1-无效'; --不写默认为0
alter table staff_info add column state tinyint(1) NOT NULL default 1 COMMENT '状态 0-有效,1-无效';
alter table staff_info add column state tinyint(1) default 0 COMMENT '状态 0-有效,1-无效'; -- 非必填用这个
show columns from table; ## 查看表结构
alter table `表名` drop column `字段名`; ## 删除某个字段名
alter table `表名` add `字段名` datetime DEFAULT NULL COMMENT '描述';
ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];
ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度)
3、普通索引
# 修改表的方式创建
ALTER TABLE 表名 ADD INDEX 索引名 (列名);
# 直接创建
CREATE INDEX 索引名 ON 表名 (列名)
CREATE TABLE 表名 (
列名 数据类型,
...
INDEX 索引名 (列名)
);
DROP INDEX 索引名 ON 表名 -- 删除索引
SHOW INDEX FROM 表名 -- 查看索引
索引相关的sql优化
1、避免在where子句中使用 or 来连接条件,使用 union all,使用or可能会使索引失效,从而全表扫描;
2、where中使用默认值代替null, where xx is null 改为 where xx =0 (xx的默认值是0);
3、避免在where子句中使用!=或<>,not in ,很可能会让索引失效;
4、合理使用 exists 和in
5、like很可能让你的索引失效
where name like '%张3%' (不使用索引)
where name like '张3%' (使用索引)
4、window安装mysql-8.0.30-winx64.zip教程
Windows10 通过 .zip 包安装 MySQL_Higgins995的博客-CSDN博客
Navicate连接不上mysql处理办法
Navicate连接mysql数据库失败_少少不会编程的博客-CSDN博客
1、下载安装包,要创建配置文件my.ini,放在解压的路径下(假定解压到c盘);
[mysql]
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir = C:\\mysql-8.0.30-winx64\\
# 设置mysql数据库的数据的存放目录, 如果目录不存在系统会自己创建(如果存在请将文件夹内的内容清空)
datadir = C:\\mysql-8.0.30-winx64\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 创建模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
2、切记要用管理员身份运行并执行命令
cd C://mysql-8.0.30-winx64
mysqld --initialize --console // 执行成功记录下初始密码,很重要
mysql --install
net start mysql
mysql -u root -p
输入或复制粘贴刚刚记录的初始密码
// 这里要是用5.x的命令,使用navicate连接时就会报错
Client does not support authentication protocol requested by server; consider upgrading MySQL client
ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '你的新密码';
flush privileges;
mysql8之前 加密规则为 mysql_native_password,mysql8之后的版本加密规则为 caching_sha2_password
## 8.x 的修改是这样的..
ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '你的新密码';
## 5.7 的修改是这样的..
ALTER USER USER() IDENTIFIED BY '你的新密码';