视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL乱码处理及字符集相关介绍_MySQL
2020-11-09 18:35:59 责编:小采
文档


从上文中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_connection、character_set_client、character_set_results这三个值。如cmd是用gbk,而mysql workbench是用utf8.

CMD:

MySql WorkBench:

4.查看数据表中字符集设置:

show full columns from tablename;

show create table tablename/G;

5.查看数据库编码:

show create database dbname;

  • 创建时指定字符集:
  • 知道了怎么查找字符集的相关信息之后,我们就要懂得怎么在创建指定对象的时候,为该对象匹配相应的字符集。

    1.服务器级:

    在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。

    2.数据库级:

    CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;

    注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置,如:

    3.表级:

    CREATE TABLE `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    从下图可看出,定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都未utf8

    但要注意,如果没有定义表的默认字符集,则他会按照character_set_database的值来设置,如图所示:

    4.列级:

    CREATE TABLE `db_name`.`tb_name` ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );

    从下图可以看到,整个表的默认字符集为gbk,所以没有指定字符集的列都用默认的字符集,而指定了字符集的列name,则使用指定的字符集utf8。

  • 修改字符集命令
  • 如果已经是创建好的对象,那又应该如何处理呢。我们就应该对指定对象就行修改字符集的操作。

    1.修改character_set_connection、character_set_client、character_set_results三值:

    对于某一个连接来说,可以使用:

    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]下增加default-character-set=utf8,配置成你想要的字符集。(个人尝试在my.ini里面配置过,没有成效,不知道是不是被使用的客户端想要的字符集给覆盖掉了呢?)

    2.修改character_set_database字段:

    ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]

    3.修改character_set_server字段:

    最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。

    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的Character Set Support: http://dev.mysql.com/doc/refman/5.6/en/charset.html

    mysql常用查看库,表字符集命令: http://bjlfp.blog.163.com/blog/static/773684612012298455765/

    MySQL 插入数据时,中文乱码问题的解决: http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html

    bitsCN.com

    下载本文
    显示全文
    专题