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