我们经常会遇到中文字符插入到MySQL数据库中,但是出来的时候却发现是乱码的情况。 例如,如果我们在表a中输入和退出这样一条记录:i
insert into a values('你好helloworld你好','helloworld');
也许当你访问它的时候,你会发现它的结果变成了如下所示:
那么我们该如何解决这个问题呢? 通过下面对MySQL中字符集的操作,你就会得到答案!
要解决字符集的问题,首先要知道当前的系统、数据库、表、客户端等都使用什么字符集,系统支持什么字符集。 以下是一些获取相关信息的语句:
1、查看数据库支持的所有字符集
show character set;或者show char set;
2.检查当前状态,当然包括字符集设置:
status或者/s
db对应数据库目录下的db.opt文件内容:
3、查看系统字符集设置,包括所有字符集设置:
show variables like '%char%';
结果如下:
含义如下:
相关字符集官方文档:
取 为由 发送的集合。
为此,使用 和 。 它由 from 发送到tion(对于具有诸如或_utf8 之类的)。 是为了 . 对于同性来说,没有自己的,哪有一个。
s 是对 的查询所在的集合。 这些数据例如名称和错误。
从上面我们可以看出、s和s这三个字符集分别在什么时候使用。 其实我们可以看到,客户端连接服务器的时候,会将自己想要的字符集名称发送给mysql服务器,然后服务器就会用这个字符集来设置三个值tion, s 。 例如cmd使用gbk,mysql使用utf8。
命令:
MySql:
4、检查数据表中的字符集设置:
show full columns from tablename;
show create table tablename/G;
5.检查数据库编码:
show create database dbname;
知道了如何找到字符集的相关信息后,我们还需要知道在创建指定对象时如何为该对象匹配对应的字符集。
1、服务器级别:
安装MySQL时,可以设置服务器的默认编码格式,也可以修改my.ini。 修改[]中的=utf8来设置该值。
2.数据库级别:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;
注意,如果不指定默认字符集,系统会根据se的值进行设置,如:
3.表层:
CREATE TABLE `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
从下图可以看出,定义表的默认字符集是utf8。 即使se是gbk,表的列也不是utf8。
但请注意,如果没有定义表的默认字符集,则会根据se的值进行设置,如图:
4、栏目级别:
CREATE TABLE `db_name`.`tb_name` ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );
从下图可以看到,整个表的默认字符集是gbk,所以没有指定字符集的列使用默认字符集,指定字符集的列名使用指定字符集utf8。
如果对象已经创建了,应该如何处理? 我们应该修改指定对象的字符集。
1.修改,s的三个值:
对于某个连接,您可以使用:
SET NAMES 'charset_name' [COLLATE 'collation_name']
命令
SET NAMES 'charset_name' [COLLATE 'collation_name']
相当于
SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;
另外,还可以修改配置文件,在[mysql]下添加--set=utf8,配置成自己想要的字符集。 (我个人尝试在my.ini中配置,但是没有成功,不知道是不是被客户端想要的字符集覆盖了?)
2.修改se字段:
ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]
3.修改字段:
最简单的方法就是直接更改my.ini配置文件中的[]字段,添加-set-=gbk,然后重启,就可以改成自己想要的字符集了。
4、修改表的字符集:
ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]
5、修改列的字符集:
col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]
例如:
ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
个人经验:
我们需要修改MySQL的默认编码,编辑my.ini(MySQL配置文件)文件对编码进行修改
设置MySQL的默认字符集为utf8,找到客户端配置[client]在下面添加。
default-character-set=utf8
设定MySQL数据库以utf8编码运行,连接MySQL数据库时使用utf8编码
停止和重新启动MySQL
net stop mysql
net start mysql --设置=utf8
找到服务器配置【】并在下面添加