本篇内容介绍了“Mysql字符集的概念及设置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  一、字符集基本概念

  1.字符(Character)是指人类语言中最小的表义符号。例如’A'、’B'等;

  2.给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的[编码]2。例如,我们给字符’A'赋予数值0,给字符’B'赋予数值1,则0就是字符’A'的编码;

  3.给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。例如,给定字符列表为{’A',’B'}时,{’A'=>0, ‘B’=>1}就是一个字符集;

  4.字符序(Collation)是指在同一字符集内字符之间的比较规则;

  5.确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系;

  6.每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation);

  7.mysql中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;

  二、MySQL默认字符集

  Mysql对于字符集的指定可以细化到一个数据库,一张表,一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.

  (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;

  (2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

  (3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;

  (4)安装 MySQL选择多语言支持,安装程序会自动在配置文件中把default_character_set 设置为 UTF-8,保证缺省情况下所有的数据库所有表的所有列的都用 UTF-8 存储。

  三、MySQL字符集设置

  1.系统变量:

  – character_set_server:默认的内部操作字符集

  – character_set_client:客户端来源数据使用的字符集

  – character_set_connection:连接层字符集

  – character_set_results:查询结果字符集

  – character_set_database:当前选中数据库的默认字符集

  – character_set_system:系统元数据(字段名等)字符集

  – 还有以collation_开头的同上面对应的变量,用来描述字符序。

  2.用introducer指定文本字符串的字符集:

  – 格式为:[_charset] ’string’ [COLLATE collation]

  – 例如:

  SELECT _latin1 ’string’;

  SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;

  – 由introducer修饰的文本字符串在请求过程中不经过多余的转码,直接转换为内部字符集处理。

  四、修改my.cnf设置客户端与服务端字符集

  1.停止MySQL;service mysqld stop

  2.备份my.cnf文件:cp /etc/my.cnf /etc/my.cnf.bak

  修改my.cnf

  vi /etc/my.cnf

  在[client]下添加,client为控制客户端

  default-character-set=utf8

  在[mysqld]下添加,mysqld为控制服务器端

  default-character-set=utf8

  3.重启MySQL

  spark220:mysqladmin:/usr/local/mysql:>service mysqld restart

  4.查看字符集是否已经修改

  mysql>show variables like '%char%';

  注:修改配置文件,并重启服务器,才可以永久生效

  五、检测字符集

  mysql> SHOW CHARACTER SET;

  mysql> SHOW COLLATION;

  mysql> SHOW VARIABLES LIKE 'character%';

  mysql> SHOW VARIABLES LIKE 'collation%';

  mysql> SQL函数HEX、LENGTH、CHAR_LENGTH

  mysql> SQL函数CHARSET、COLLATION

  MySQL的字符集主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定。对于使用者来说,一般推荐使用utf8编码来存储数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还和用户的程序文件的编码方式、用户程序和MySQL数据库的连接方式都有关系。

  客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set names命令。

  set names utf8命令对应的是服务器端以下几个命令:

  SET character_set_client = utf8;

  SET character_set_results = utf8;

  SET character_set_connection = utf8;

  注:三个参数是不能写在配置文件my.cnf里的,只能通过set命令来动态修改,但在init_connect里设置,这个命令在每

  个普通用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行设置连接字符集:

  在[mysqld]下添加:

  init_connect = 'SET NAMES utf8'

  总结:

  1、编译安装MySQL的时候指定两个参数使用utf8编码。

  2、配置文件my.cnf设定两个参数,同时设置init_connect参数。

  3、配置文件my.cnf设定两个参数,同时客户端的连接指定set names命令。

  4、配置文件my.cnf里的client和server处加入default-character-set参数方便管理。

  “MySQL字符集的概念及设置方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

最后修改:2024 年 07 月 20 日
如果觉得我的文章对你有用,请随意赞赏