首页 > 数据库 >MySQL 5.7中文乱码与远程链接问题

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

时间:2022-12-10 23:34:46浏览次数:72  
标签:NO utf8 5.7 字符集 乱码 ZERO mysqld MySQL

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
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:

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

在这里插入图片描述

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

标签:NO,utf8,5.7,字符集,乱码,ZERO,mysqld,MySQL
From: https://www.cnblogs.com/jackwei1996/p/16972614.html

相关文章

  • 《MySQL必知必会》之快速入门存储过程
    使用存储过程本章介绍什么是存储过程,为什么使用、如何使用,并介绍如何创建和使用存储过程的基本语法存储过程在实际应用中,往往需要执行多个表的多条sql语句存储过程就......
  • mysql约束
    Mysql约束约束用于确保数据库的数据满足特定的商业规则在Mysql中,约束包括:notnull、unique、primarykey、foreignkey和check五种primarykey(主键)的使用(主键列不......
  • MySQL 5.7中文乱码与远程链接问题
    (MySQL5.7中文乱码与远程链接问题)1.MySQL5.7中文乱码当我们直接在数据库里面输入中文时,保存后出现:Incorrectstringvalue:‘\xE9.....’forcolumn''atrow1出......
  • python连接数据库mysql
    前提:电脑已经安装数据库环境1、导入pymysql库2、建立连接:md=pymysql.connect(host='localhost',user='root',password='数据库密码',db='lili')3、新建游标:cur=md......
  • 力扣175(MySQL)-组合两个表(简单)
    题目:表: Person  表: Address编写一个SQL查询来报告Person表中每个人的姓、名、城市和州。如果personId的地址不在 Address 表中,则报告为空 null 。以......
  • 静态文件配置 django连接MySQL django模型层初识 ORM基本语句
    目录静态文件配置1.问题描述2.静态文件3.资源访问form表单属性补充actionmethod请求方法get请求post请求views层request对象request.methodrequest.POSTrequest.GETpyc......
  • mysql/lightdb for pg/oracle jdbc大数据量插入优化
    10.10.6 大数据量插入优化在很多涉及支付和金融相关的系统中,夜间会进行批处理,在批处理的一开始或最后一般需要将数据回库,因为应用和数据库通常部署在不同的服务器,而且应用......
  • benchmarksql详解及支持mysql、达梦、citus的lightdb benchmarksql分支
    为什么使用benchmarksql压测?因为大多数应用系统使用java开发,并且不使用存储过程,故使用benchmarksql压测数据库最公平,既可以测试数据库,也可以测试JDBC驱动。可以用来......
  • oracle 12.2+支持mysql与postgresql中的collate(排序规则)特性
    sqlserver,mysql,postgresql都支持针对字符串类型定义排序规则的概念(collate),一般来说,排序规则分为三种:基于二进制,是否区分大小写,是否区分重音。例如sqlserver中:SELE......
  • oracle/mysql/lightdb/postgresql java jdbc类型映射
    MySQL数据类型JAVA数据类型JDBCTYPE普通变量类型主键类型BIGINTLongBIGINT支持支持TINYINTByteTINYINT支持不支持SMALLINTShortSMALLINT支持不支持MEDIUMINTIntegerINTEGER......