• 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

     

     

  • 相关阅读:
    安装最新版Mysql(APT方式安装)
    Tengine环境安装
    Docker 教程
    Docker Redis
    Ubuntu
    spring boot actuator 如何显示详细信息
    spring boot 加载日志框架后经常出现 LOG_PATH_IS_UNDEFINED 目录怎么办?【未解决】
    Tomcat 目录结构以及基本配置
    Java Hash集合的equals()与hashCode() 方法
    Java Map 集合实现类
  • 原文地址:https://www.cnblogs.com/5poi/p/10893308.html
Copyright © 2020-2023  润新知