很多人在操作数据库时,经常遇到在表中添加中文就显示?的情况,其实这就是编码问题,想要解决此问题,只需要更改编码就可以解决。
1.长久解决
长久解决方法就是更改my.ini
配置文件。
- 查看
my.ini
文件位置:
mysql分为安装目录和数据目录,一般我们解压mysql的目录就是安装目录,而数据目录就是存放数据库或者表的地方。它们的存放位置可以通过配置文件my.ini
查看。有的配置文件在programData的MySQL目录下,有的在Program Files的MySQL目录下
。我的在programData
目录下。
my.ini
里面指向的安装目录:
my.ini
指向的数据存放目录:
知晓了这两个位置后,下面就是更改编码了。
- 更改
my.ini
中相关编码,避免乱码问题
- 更改客户端编码
- 更改服务端编码
将客户端和服务端设置完成后,需要打开windows中的服务管理器(在cmd中直接输入services.msc
),然后重启mysql57
服务,配置文件才可以生效。
或者直接以管理员身份运行cmd,然后输入net stop mysql57
和net start mysql57
完成重启。选择上述任意一个方案后,以管理员身份运行cmd,登录到mysql服务器中,查看编码是否改变。
进入到mysql服务器中命令:
mysql -uroot -p密码
查看编码是否改变:show variables like 'char%';
【模糊查询查看】
这里存在一个小问题,就是如果my.ini
文件在programData
目录下的话,需要在program Files
下再创建一个my.ini
文件。文件内容如下:
[mysqld]
#设置3306端口号
port=3306
#服务端使用的字符集默认为utf-8
character-set-server=utf8
[mysql]
#客户端使用的字符集默认为utf8
default-character-set=utf8
解决完编码后,无论创建数据库还是创建表,默认的编码都是utf-8
,不会再出现乱码问题!
2. 暂时解决
暂时解决就是每次在创建数据库和表是都要指定编码,但是只对此次创建的有效,当下次创建不指定时,仍然存在乱码情况。
因为没有修改配置文件,因此每次创建数据库或者表时都需要指定编码。
- 创建数据库时:
create database 数据库名 default charset=utf8;
- 创建表时:
create table 表名(字段名1 数据类型1,字段名2 数据类型2,...) default charset=utf8
这样就可以让你创建的数据库和表中的数据类型为字符类型的编码为utf-8
编码,但是仅仅针对这一个数据库而言。因此,推荐第一种方式!