最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL乱码处理及字符集相关介绍_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:35:59
文档

MySQL乱码处理及字符集相关介绍_MySQL

MySQL乱码处理及字符集相关介绍_MySQL:bitsCN.com 问题引入: 我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:iinsert into a values('你好helloworld你好','helloworld');可能当你访问它的时候,会发现他的结
推荐度:
导读MySQL乱码处理及字符集相关介绍_MySQL:bitsCN.com 问题引入: 我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:iinsert into a values('你好helloworld你好','helloworld');可能当你访问它的时候,会发现他的结


从上文中可以看出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

    文档

    MySQL乱码处理及字符集相关介绍_MySQL

    MySQL乱码处理及字符集相关介绍_MySQL:bitsCN.com 问题引入: 我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:iinsert into a values('你好helloworld你好','helloworld');可能当你访问它的时候,会发现他的结
    推荐度:
    标签: 记录 介绍 乱码
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top