本文主要针对于Linux下MySQL插入中文数据显示问号的问题。
网上一种普遍使用的方法是修改/etc/my.cnf文件(我的这个文件位于/etc/mysql/my.cnf),修改步骤如下:
1.在client段中加上default-character-set = utf8
2.在mysqld段中加上character_set_server = utf8
3.mysql段中加上default-character-set = utf8
保存退出后重启mysql即可。
需要注意的是,这种方法是保证后续创建的库的默认编码格式为uft-8,对于已有的库和表来说是没有效果的!
也就是说,即使是修改了my.cnf文件,本身就存在的数据库和表的编码格式依然没有改变,举个例子,如果在修改my.cnf文件前,库的编码格式为latin,那么修改了my.cnf文件后,该库的编码格式依旧为latin,如果此时再在库中创建新的表,由于表的默认编码格式是根据库决定的,因此新的表默认的编码格式也是latin,表中的各个字段也是如此。
下面来说一下如何解决“已存在的库、表和字段”中的中文乱码问题。
首先,在修改my.cnf文件后,对于已经存在的库,还应当修改库的默认编码格式为utf8,这里也需要注意,和前面类似,即使修改了库的默认编码格式为utf8,也只是保证了后续所创建的表的默认编码格式为utf8,对于已存在的表来说还是没有效果的!举个例子,库中原本有表student其默认编码格式为latin,修改了库的默认编码格式为utf8之后,如果新建一个新表mark,那么表mark的默认编码格式就与该库相同为utf8,而表student的默认编码格式依然为latin。
因此,如果student表中存在中文乱码的话,此时就还应当修改student表的默认编码格式为utf8,还还还还要注意的是,表的默认编码格式修改也只是对后续创建的新字段有效,对于已有字段依然是没有效果的!!!
因此,还要将乱码出现的字段的编码格式修改为utf8,修改字段的编码格式之后,中文乱码并不会正常,此时可以用UPDATE来将乱码数据更新为中文。
下面给出查看和修改编码格式常用的语句。
1.查看数据库编码格式
mysql> show variables
like
'character_set_database'
;
2.查看数据表的编码格式
mysql> show
create
table
<表名>;
3.创建数据库时指定数据库的字符集
mysql>create database <数据库名> character set utf8;
4.创建数据表时指定数据表的编码格式
create table tb_books (
name varchar(45) not null,
price double not null,
bookCount int not null,
author varchar(45) not null ) default charset = utf8;
5.修改数据库的编码格式
mysql>alter database <数据库名> character set utf8;
6.修改数据表格编码格式
mysql>alter table <表名> character set utf8;
7.修改字段编码格式
mysql>alter table <表名> change <字段名> <字段名> <类型> character set utf8;
mysql>alter table user change username username varchar(20) character set utf8 not null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)