SQL

1、创建数据库:

# utf-8
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

所谓utf8_unicode_ci,其实是用来排序的规则。

对于mysql中那些字符类型的列,如VARCHAR,CHAR,TEXT类型的列,都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比较。

COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响**DISTINCT****GROUP BY****HAVING**语句的查询结果

另外,mysql建索引的时候,如果索引列是字符类型,也会影响索引创建

总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关


COLLATE通常是和数据编码(CHARSET)相关的,

一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。

例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci。

 

很多COLLATE都带有_ci字样,这是Case Insensitive的缩写,即大小写无关,

也就是说"A"和"a"在排序和比较的时候是一视同仁的。

selection * from table1 where field1="a"同样可以把field1为"A"的值选出来。

与此同时,对于那些_cs后缀的COLLATE,则是Case Sensitive,即大小写敏感的。

 

在mysql中使用 show collation 指令可以查看到mysql所支持的所有COLLATE

 

设置COLLATE可以在示例级别、库级别、表级别、列级别、以及SQL指定。

实例级别的COLLATE设置就是mysql配置文件或启动指令中的collation_connection系统变量。

优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 实例级别设置。

2、在CMD中操作mysql数据库出现中文乱码解决方案

保证cmd客户端和MySQL两者编码一致即可。

只需在cmd里告诉mysql服务器我客户端这边编码和想要的结果集编码即可。

set character_set_client=gbk;       //告诉我客户端这边的文字编码

set character_set_results=gbk;     //告诉mysql希望返回的结果集编码;

只要客户端是gbk编码的,只要设置这个就可以解决乱码这个问题。

还有另外一个好用的命令可以同时达到上面两条指令的效果:

set charset gbk;       //和上面两个效果一致。

  

 http://www.cnblogs.com/digdeep/p/5228199.html

http://www.cnblogs.com/discuss/articles/1862248.html

https://www.cnblogs.com/lazyno/archive/2015/02/07/4278544.html

MySQL 8.0安装    同时安装两个版本的mysql数据库

一、下载MySQL

进入官网 https://dev.mysql.com  选择【DOWNLOADS】=>选择开源社区服务【MySQL Community Server】页面,下拉选择操作系统下载。

或者直接进入 https://dev.mysql.com/downloads/file/?id=476233 页面选择 No thanks, just start my download 下载 mysql-8.0.11-winx64.zip文件到本地。

二、把下载下来的压缩包解压到 本地集成开发的目录中,如 H:mysql-8.0.16-winx64

三、在mysql-8.0.16-winx64文件夹下面新建一个 my.ini 文件和一个 data文件夹

#my.ini 内容:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=H:\mysql-8.0.16-winx64
# 设置mysql数据库的数据的存放目录
datadir=H:\mysql-8.0.16-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# MySQL8.0.4之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。
# 但因为当前有很多数据库工具和链接包都不支持“caching_sha2_password”,为了方便,我暂时改回了“mysql_native_password”认证插件。
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

四、配置系统环境

 

新建变量 MYSQL_HOME,设置路径为:H:mysql-8.0.16-winx64

path 中添加%MYSQL_HOME%in

五、管理员的身份打开cmd窗口跳转路径到 H:mysql-8.0.16-winx64in 下:

初始化命令:mysqld --initialize

初始化成功后,命令行没有任何提示。但在mysql8.0文件夹中已自动生成了data目录

六、添加服务:

>>>mysqld install MySQL8.0 --default-file="H:mysql-8.0.16-winx64my.ini"

打开注册表,找到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMySQL8.0,修改ImagePath参数,更正 MySQL8.0 服务相关路径。

修改ImagePath参数:"H:mysql-8.0.16-winx64inmysqld" MySQL8.0

注:移除已错误安装的mysqld服务:mysqld -remove MySQL8.0

七、登录启动:

输入 net start MySQL8.0 启动服务

输入 mysql -u root -p 进行登录数据库,这时提示需要密码,临时密码在data文件夹.err 结尾文件中。

八、修改密码:

修改密码语句:ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '123456';    修改密码为:123456

备注:8.0之前版本,忘记密码修改方法

  • 找到bin目录:mysqld --skip-grant-tables
  • 重新在开一个cmd窗口
  • 找到bin目录:mysql就进入登陆状态了
  • 5.7.22 修改密码语句:update user set authentication_string=password('123456') where user='root' and host='localhost';
  • 5.6. 修改密码语句:update user set password=password('123456') where user='root' and host='localhost'; 
九、本地访问设置为远程访问权限

查看用户信息:

  select user,host,authentication_string from mysql.user;

  或者:show grants for root@'localhost';

  或者:select * from mysql.userG      (格式化输出)

此时数据库的root用户仅限localhost登录访问。如果要允许开放其他ip登录,则需要添加新的host。如果要允许所有ip访问,可以直接修改成"%".

重新创建了个root用户并修改了权限.操作如下:

  create user 'hong'@'%' identified by '123456';

  flush privileges;

  grant all privileges on *.* to 'hong'@'%' with grant option;

 

十、异常:在执行一段SQL时出现以下问题

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这个问题主要是由于sql_mode引起,所以先查看sql_mode后修改即可,主要是去除 only_full_group_by

解决方案: 

方案一:只修改当前数据库的SQL_MODE

-- 查看SQL_MODE

SELECT @@sql_mode;

-- 修改SQL_MODE

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

方案二:修改配置文件my.ini

-- 查看数据库的存储地址

SELECT @@datadir

# my.ini,添加

[mysql] 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  

 MYSQL:alter语句中change和modify的区别

 https://www.cnblogs.com/richiewlq/p/7697726.html

 

 

原文地址:https://www.cnblogs.com/5poi/p/10893308.html