美文网首页
MySQL 5.7中文乱码与远程链接问题

MySQL 5.7中文乱码与远程链接问题

作者: Jack魏 | 来源:发表于2022-12-09 23:22 被阅读0次

    1. MySQL 5.7中文乱码

    当我们直接在数据库里面输入中文时,保存后出现:
    Incorrect string value:‘\xE9.....’ for column '' at row 1


    出现上面的原因是因为字符编码设置有问题:
    我们右击表设计,查看一下对应的字段:
    可以看到字符集是latin1,我们可知MySQL5.7版本默认字符编码是latin1
    这个字符集是不支持中文的,那我们怎么支持中文呢?

    支持中文的有:GBK、UTF8、UTF8mb4等
    目前比较常用的是UTF8了,如果是有表情特殊字符需要用到UTF8mb4。
    因为他们底层使用的存储大小不同:
    字符编码 所占大小(字节)
    latin1 1
    gb2312 2
    gbk 2
    utf8 3
    utf8mb4 4

    PS:MySQL8.0之后默认就是utf8mb4 字符集了。

    也可以使用语句查询:

    SHOW CHARACTER SET;
    

    所有我要修改一下默认字符集,
    需要到C:\ProgramData\MySQL\MySQL Server 5.7下面修改my.ini文件。
    默认情况下可以从上面查找。
    如果不知道可以运行如下命令查看:
    # 查看运行程序目录
    select @@basedir;
    
    # 查看数据库存储(配置文件在此上一层)
    select @@datadir;
    

    然后添加如下内容:
    注意中括号里面的是配置其下面,不要复制过去。

    [client]
    default-character-set=utf8
    
    [mysql]
    # 配置默认字符集
    default-character-set=utf8
     
    [mysqld]
    # 配置字符集和排序 
    character-set-server=utf8
    collation-server=utf8_general_ci
    

    查看是否设置成功,
    这个时候一定要注意,之前新建的数据库还是原来的字符集
    需要新建数据库才能更改成默认的,如果不想新建需要一个一个修改指定的字段即可。

    show VARIABLES like '%character%'
    

    2. 远程链接问题

    当我们本地电脑连接本地的数据库时是没有问题的,
    如果是在一个局域网内,其他电脑访问就有问题了,
    说明没有开启远程链接权限。


    参考文档:MySQL远程登录授权
    # 允许root远程链接,并通过指定密码验证
    grant all privileges on *.* to root@'%' identified by '123456';
    

    执行完一下语句,其他电脑即可远程链接了。


    3. 不区分表大小写

    Windows默认是区分大小写的,
    这时候需要修改MySQL的配置my.ini文件 ,
    需要在mysqld节下加入:

    [mysqld]
    # 配置表名不区分大小写
    lower_case_table_names=1
    

    4. 超过最大连接数

    如果你的MySQL服务器作为其他电脑的连接服务器,
    有可能会出现连接超过最大连接数

    show global variables like 'max_connect%';
    

    执行上面的语句,我们可以看到到达100就会报错了。
    所以我们要修改一下最大连接数。



    解决方案:在mysqld下面添加如下设置

    [mysqld]
    
    max_connections = 2000
    

    5. 时区问题

    参考文档:MySQL如何修改时区
    可以看到默认采用系统的时区,但是有可能系统时区有问题。

    [mysqld]
    
    default-time_zone = '+8:00'
    

    5. GROUP BY 问题

    参考文档:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column xxxxx

    [mysql]
    # Group by会用到
    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
    [mysqld]
    # Group by会用到
    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    

    配置集合

    [client]
    default-character-set=utf8
    [mysql]
    # 配置默认字符集
    default-character-set=utf8
    
    # Group by会用到
    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
    [mysqld]
    # 默认时区
    default-time_zone = '+8:00'
    
    # 配置字符集和排序 
    character-set-server=utf8
    collation-server=utf8_general_ci
    
    # 服务端口
    port=3306
    
    # 主从id
    server-id=1
    
    # 配置表名不区分大小写
    lower_case_table_names=1
    
    # 最大连接数
    max_connections=2000
    
    # 数据库存储地址
    datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data
    
    # 存储引擎
    default-storage-engine=INNODB
    
    # Group by会用到
    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

    经过上面的配置之后,需要重启MySQL:


    MySQL 5.7中文乱码与远程链接问题

    1. MySQL 5.7中文乱码
    2. 远程链接问题
    3. 不区分表大小写
    4. 超过最大连接数
    5. 时区问题
    6. GROUP BY 问题
      配置集合
      重启MySQL
    7. MySQL 5.7中文乱码
      当我们直接在数据库里面输入中文时,保存后出现:
      Incorrect string value:‘\xE9.....’ for column '' at row 1

    在这里插入图片描述
    出现上面的原因是因为字符编码设置有问题:
    我们右击表设计,查看一下对应的字段:
    可以看到字符集是latin1,我们可知MySQL5.7版本默认字符编码是latin1
    这个字符集是不支持中文的,那我们怎么支持中文呢?
    在这里插入图片描述
    支持中文的有:GBK、UTF8、UTF8mb4等
    目前比较常用的是UTF8了,如果是有表情特殊字符需要用到UTF8mb4。
    因为他们底层使用的存储大小不同:

    字符编码 所占大小(字节)
    latin1 1
    gb2312 2
    gbk 2
    utf8 3
    utf8mb4 4
    PS:MySQL8.0之后默认就是utf8mb4 字符集了。

    也可以使用语句查询:

    SHOW CHARACTER SET;
    在这里插入图片描述
    所有我要修改一下默认字符集,
    需要到C:\ProgramData\MySQL\MySQL Server 5.7下面修改my.ini文件。
    默认情况下可以从上面查找。
    如果不知道可以运行如下命令查看:

    查看运行程序目录

    select @@basedir;

    查看数据库存储(配置文件在此上一层)

    select @@datadir;
    在这里插入图片描述

    然后添加如下内容:
    注意中括号里面的是配置其下面,不要复制过去。

    [client]
    default-character-set=utf8

    [mysql]

    配置默认字符集

    default-character-set=utf8

    [mysqld]

    配置字符集和排序

    character-set-server=utf8
    collation-server=utf8_general_ci
    查看是否设置成功,
    这个时候一定要注意,之前新建的数据库还是原来的字符集。
    需要新建数据库才能更改成默认的,如果不想新建需要一个一个修改指定的字段即可。

    show VARIABLES like '%character%'
    在这里插入图片描述

    1. 远程链接问题
      当我们本地电脑连接本地的数据库时是没有问题的,
      如果是在一个局域网内,其他电脑访问就有问题了,
      说明没有开启远程链接权限。
      在这里插入图片描述
      参考文档:MySQL远程登录授权

    允许root远程链接,并通过指定密码验证

    grant all privileges on . to root@'%' identified by '123456';
    执行完一下语句,其他电脑即可远程链接了。
    在这里插入图片描述

    在这里插入图片描述

    1. 不区分表大小写
      Windows默认是区分大小写的,
      这时候需要修改MySQL的配置my.ini文件 ,
      需要在mysqld节下加入:

    [mysqld]

    配置表名不区分大小写

    lower_case_table_names=1

    1. 超过最大连接数
      如果你的MySQL服务器作为其他电脑的连接服务器,
      有可能会出现连接超过最大连接数

    show global variables like 'max_connect%';
    执行上面的语句,我们可以看到到达100就会报错了。
    所以我们要修改一下最大连接数。
    在这里插入图片描述
    解决方案:在mysqld下面添加如下设置

    [mysqld]

    max_connections = 2000

    1. 时区问题
      参考文档:MySQL如何修改时区
      可以看到默认采用系统的时区,但是有可能系统时区有问题。
      在这里插入图片描述

    [mysqld]

    default-time_zone = '+8:00'

    1. GROUP BY 问题
      参考文档:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column xxxxx

    [mysql]

    Group by会用到

    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

    [mysqld]

    Group by会用到

    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    配置集合
    [client]
    default-character-set=utf8
    [mysql]

    配置默认字符集

    default-character-set=utf8

    Group by会用到

    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

    [mysqld]

    默认时区

    default-time_zone = '+8:00'

    配置字符集和排序

    character-set-server=utf8
    collation-server=utf8_general_ci

    服务端口

    port=3306

    主从id

    server-id=1

    配置表名不区分大小写

    lower_case_table_names=1

    最大连接数

    max_connections=2000

    数据库存储地址

    datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data

    存储引擎

    default-storage-engine=INNODB

    Group by会用到

    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
    经过上面的配置之后,需要重启MySQL:

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    Markdown 已选中 3787 字数 193 行数 当前行 193, 当前列 0HTML 2493 字数 116 段落

    相关文章

      网友评论

          本文标题:MySQL 5.7中文乱码与远程链接问题

          本文链接:https://www.haomeiwen.com/subject/uvetqdtx.html