MySQL提供了差其余字符集协理,则提供了区其他字符序帮助

肆,运营时修改

事例:运维时修改(重启后会失效,如若想要重启后维持不变,须求写进配置文件里)

mysql> SET character_set_server = utf8 ;

一、内容概述

在MySQL的利用进程中,明白字符集、字符序的概念,以及差异设置对数码存储、比较的熏陶特别主要。不少同班在日常工作中境遇的“乱码”难题,很有只怕就是因为对字符集与字符序的知道不做到、设置错误导致的。

正文由表及里,分别介绍了如下内容:

  1. 字符集、字符序的基本概念及关联
  2. MySQL辅助的字符集、字符序设置级,各设置级别之间的维系
  3. server、database、table、column级字符集、字符序的查阅及安装
  4. 有道是何时设置字符集、字符序

一,创制table并指定字符集/字符序

事例如下,指定字符集为utf8,字符序则动用暗中同意的。

CREATE TABLE `test_schema`.`test_table` (
  `id` INT NOT NULL COMMENT '',
  PRIMARY KEY (`id`)  COMMENT '')
DEFAULT CHARACTER SET = utf8;

四、server的字符集、字符序

用途:当您成立数据库,且没有点名字符集、字符序时,server字符集、server字符序就会作为该数据库的暗许字符集、排序规则。

什么样指定:MySQL服务运维时,可通过命令行参数指定。也可以经过安插文件的变量指定。

server私自认同字符集、字符序:在MySQL编译的时候,通过编译参数指定。

character_set_server、collation_server分别对应server字符集、server字符序。

1、查看server字符集、字符序

各自对应character_set_server、collation_server五个连串变量。

mysql> SHOW VARIABLES LIKE "character_set_server";
mysql> SHOW VARIABLES LIKE "collation_server";

贰,运维服务时指定

可以在MySQL服务运行时,指定server字符集、字符序。如不指定,暗许的字符序分别为latin壹,latin1_swedish_ci

mysqld --character-set-server=latin1 \
 --collation-server=latin1_swedish_ci

单身指定server字符集,此时,server字符序为latin1的默许字符序latin1_swedish_ci。

mysqld --character-set-server=latin1

三,配置文件指定

除却在命令行参数里指定,也足以在布署文件里指定,如下所示。

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

四,运营时修改

事例:运营时修改(重启后会失效,假设想要重启后维持不变,需求写进配置文件里)

mysql> SET character_set_server = utf8 ;

五,编译时指定暗中同意字符集、字符序

character_set_server、collation_server的暗中同意值,可以在MySQL编译时,通过编译选项指定:

cmake . -DDEFAULT_CHARSET=latin1 \
  -DDEFAULT_COLLATION=latin1_german1_ci

一,查看协理的字符集

可以经过以下办法查看MYSQL支持的字符集。

方式一:

mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
...省略

方式二:

mysql> use information_schema;
mysql> select * from CHARACTER_SETS;
+--------------------+----------------------+-----------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION                 | MAXLEN |
+--------------------+----------------------+-----------------------------+--------+
| big5               | big5_chinese_ci      | Big5 Traditional Chinese    |      2 |
| dec8               | dec8_swedish_ci      | DEC West European           |      1 |
...省略

当使用SHOW CHARACTER SET查看时,也能够增加WHERELIKE限制条件。

例子一:使用WHERE界定条件。

mysql> SHOW CHARACTER SET WHERE Charset="utf8";
+---------+---------------+-------------------+--------+
| Charset | Description   | Default collation | Maxlen |
+---------+---------------+-------------------+--------+
| utf8    | UTF-8 Unicode | utf8_general_ci   |      3 |
+---------+---------------+-------------------+--------+
1 row in set (0.00 sec)

例子二:使用LIKE范围标准。

mysql> SHOW CHARACTER SET LIKE "utf8%";
+---------+---------------+--------------------+--------+
| Charset | Description   | Default collation  | Maxlen |
+---------+---------------+--------------------+--------+
| utf8    | UTF-8 Unicode | utf8_general_ci    |      3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci |      4 |
+---------+---------------+--------------------+--------+
2 rows in set (0.00 sec)

五、database的字符集、字符序

用途:指定数据库级其他字符集、字符序。同三个MySQL服务下的数据库,可以分别指定不相同的字符集/字符序。

①设置数据的字符集/字符序

可以在创设、修改数据库的时候,通过CHARACTE卡宴SET、COLLATE指定数据库的字符集、排序规则。

始建数据库:

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

修改数据库:

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

事例:成立数据库test_schema,字符集设置为utf8,此时专断认同的排序规则为utf8_general_ci。

CREATE DATABASE `test_schema` DEFAULT CHARACTER SET utf8;

二,查看数据库的字符集/字符序

有3种办法可以查阅数据库的字符集/字符序。

例子一:查看test_schema的字符集、排序规则。(需求切换私行认同数据库)

mysql> use test_schema;
Database changed
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8   | utf8_general_ci |
+--------------------------+----------------------+
1 row in set (0.00 sec)

事例二:也足以通过上边发号施令查看test_schema的字符集、数据库(不需求切换专断认同数据库)

mysql> SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE schema_name="test_schema";
+-------------+----------------------------+------------------------+
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+-------------+----------------------------+------------------------+
| test_schema | utf8   | utf8_general_ci |
+-------------+----------------------------+------------------------+
1 row in set (0.00 sec)

事例三:也得以由此查看成立数据库的话语,来查阅字符集。

mysql> SHOW CREATE DATABASE test_schema;
+-------------+----------------------------------------------------------------------+
| Database | Create Database       |
+-------------+----------------------------------------------------------------------+
| test_schema | CREATE DATABASE `test_schema` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)

三,database字符集、字符序是怎么规定的

创设数据库时,指定了CHARACTEEscortSET或COLLATE,则以对应的字符集、排序规则为准。
创办数据库时,尽管没有点名字符集、排序规则,则以character_set_server、collation_server为准。

一,设置数据的字符集/字符序

能够在开立、修改数据库的时候,通过CHARACTER SETCOLLATE指定数据库的字符集、排序规则。

开创数据库:

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

修改数据库:

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

事例:创设数据库test_schema,字符集设置为utf8,此时暗中认同的排序规则为utf8_general_ci

CREATE DATABASE `test_schema` DEFAULT CHARACTER SET utf8;

七、column的字符集、排序

品类为CHA锐界、VARAV4CHAPAJERO、TEXT的列,可以指定字符集/字符序,语法如下:

col_name {CHAR | VARCHAR | TEXT} (col_length)
 [CHARACTER SET charset_name]
 [COLLATE collation_name]

壹,新增column并指定字符集/排序规则

事例如下:(创造table类似)

mysql> ALTER TABLE test_table ADD COLUMN char_column VARCHAR(25) CHARACTER SET utf8;

二,查看column的字符集/字符序

事例如下:

mysql> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test_schema" AND TABLE_NAME="test_table" AND COLUMN_NAME="char_column";
+--------------------+-----------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+-----------------+
| utf8  | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

3、column字符集/排序规则规定

假诺CHARACTE昂科雷 SET、COLLATE的值分别是charset_name、collation_name:

如果charset_name、collation_name均强烈,则字符集、字符序以charset_name、collation_name为准。

只明显了charset_name,collation_name未鲜明,则字符集为charset_name,字符序为charset_name的暗中认可字符序。

只明显了collation_name,charset_name未显明,则字符序为collation_name,字符集为collation_name关联的字符集。

charset_name、collation_name均未分明,则以table的字符集、字符序为准。

一,新增column并指定字符集/排序规则

事例如下:(创设table类似)

mysql> ALTER TABLE test_table ADD COLUMN char_column VARCHAR(25) CHARACTER SET utf8;

二、字符集、字符序的概念与关系

在数据的囤积上,MySQL提供了差别的字符集帮忙。而在数量的对照操作上,则提供了差其他字符序帮忙。

MySQL提供了差异级其他设置,包罗server级、database级、table级、column级,可以提供特别精准的安装。

怎么样是字符集、字符序?简单的来说:

  1. 字符集(character set):定义了字符以及字符的编码。
  2. 字符序(collation):定义了字符的相比规则。

举个例证:

有两个字符:A、B、a、b,那三个字符的编码分别是A = 0, B = 1, a = 2, b =
3。那里的字符 + 编码就结成了字符集(character set)。

即使大家想相比较多个字符的大小呢?比如A、B,或然a、b,最直观的可比艺术是利用它们的编码,比如因为0
< 1,所以 A < B。

除此以外,对于A、a,即便它们编码差距,但我们认为大小写字符应该是非常的,也等于说
A == a。

那方面定义了两条相比规则,这个比较规则的成团就是collation。

  1. 同样是大写字符、小写字符,则相比较他们的编码大小;
  2. 假定多个字符为大小写关系,则它们相当于。

二、字符集、字符序的定义与交换

在数额的囤积上,MySQL提供了不一致的字符集辅助。而在数据的对待操作上,则提供了不一致的字符序支持。

MySQL提供了不相同级其余安装,包括server级、database级、table级、column级,可以提供拾贰分精准的装置。

何以是字符集、字符序?简单的来说:

  1. 字符集(character set):定义了字符以及字符的编码。
  2. 字符序(collation):定义了字符的可比规则。

举个例子:

有八个字符:A、B、a、b,这八个字符的编码分别是A = 0, B = 1, a = 2, b =
3。那里的字符 + 编码就整合了字符集(character set)。

设若大家想比较三个字符的轻重缓急呢?比如A、B,大概a、b,最直观的可比艺术是应用它们的编码,比如因为0
< 1,所以 A < B。

其余,对于A、a,即便它们编码差异,但大家认为大小写字符应该是格外的,约等于说
A == a。

这方面定义了两条比较规则,那几个比较规则的碰面就是collation。

  1. 一致是大写字符、小写字符,则比较他们的编码大小;
  2. 假设七个字符为大小写关系,则它们相当于。

三、MySQL帮忙的字符集、字符序

MySQL帮衬多种字符集 与 字符序。

  1. 壹个字符集对应至少一种字符序(一般是1对多)。
  2. 三个不等的字符集无法有雷同的字符序。
  3. 每种字符集都有默许的字符序。

地点说的可比空虚,大家看下前面多少个小节就领悟怎么回事了。

1、查看援救的字符集

可以透过以下措施查看MYSQL扶助的字符集。

方式一:

mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description   | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European  | dec8_swedish_ci | 1 |
...省略

方式二:

mysql> use information_schema;
mysql> select * from CHARACTER_SETS;
+--------------------+----------------------+-----------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION   | MAXLEN |
+--------------------+----------------------+-----------------------------+--------+
| big5  | big5_chinese_ci | Big5 Traditional Chinese | 2 |
| dec8  | dec8_swedish_ci | DEC West European  | 1 |
...省略

当使用SHOW CHARACTE昂科拉 SET查看时,也可以增进WHERE或LIKE限定标准。

事例一:使用WHERE限定标准。

mysql> SHOW CHARACTER SET WHERE Charset="utf8";
+---------+---------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+-------------------+--------+
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
+---------+---------------+-------------------+--------+
1 row in set (0.00 sec)

事例二:使用LIKE限定条件。

mysql> SHOW CHARACTER SET LIKE "utf8%";
+---------+---------------+--------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+--------------------+--------+
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
+---------+---------------+--------------------+--------+
2 rows in set (0.00 sec)

二,查看资助的字符序

类似的,可以因而如下方式查看MYSQL帮衬的字符序。

方式一:通过SHOW COLLATION举行查看。

可以看看,utf8字符集有当先10种字符序。通过Default的值是或不是为Yes,判断是还是不是暗许的字符序。

mysql> SHOW COLLATION WHERE Charset = 'utf8';
+--------------------------+---------+-----+---------+----------+---------+
| Collation  | Charset | Id | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci  | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin   | utf8 | 83 |  | Yes | 1 |
...略

方式二:查询information_schema.COLLATIONS。

mysql> USE information_schema;
mysql> SELECT * FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8";
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME  | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci  | utf8  | 33 | Yes | Yes  | 1 |
| utf8_bin   | utf8  | 83 |  | Yes  | 1 |
| utf8_unicode_ci  | utf8  | 192 |  | Yes  | 8 |

三,字符序的命名规范

字符序的命名,以其对应的字符集作为前缀,如下所示。比如字符序utf8_general_ci,标明它是字符集utf8的字符序。

愈多规则可以参考 官方文档。

MariaDB [information_schema]> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8" limit 2; 
+--------------------+-----------------+
| CHARACTER_SET_NAME | COLLATION_NAME |
+--------------------+-----------------+
| utf8  | utf8_general_ci |
| utf8  | utf8_bin |
+--------------------+-----------------+
2 rows in set (0.00 sec)

3、格局三:从源码编译mysql的时候,通过编译参数举办安装

编译的时候假使指定了-DDEFAULT_CHARSET-DDEFAULT_COLLATION,那么:

  • 成立database、table时,会将其当作默许的字符集/字符序。
  • client连接server时,会将其看作默许的字符集/字符序。(不用单独SET
    NAMES)

    shell> cmake . -DDEFAULT_CHARSET=utf8 \

           -DDEFAULT_COLLATION=utf8_general_ci
    

九、写在背后

本文较为详细地介绍了MySQL中字符集、字符序相关的内容,这部分内容重点针对的是数量的囤积与相比较。其实还有很要紧的一有个别内容还没提到:针对一连的字符集、字符序设置。

由于一连的字符集、字符序设置不当造成的乱码难题也充足多,那有的内容展开来讲内容也不少,放在下一篇小说举行教学。

二,查看table的字符集/字符序

一致,有3种办法得以查看table的字符集/字符序。

方式一:通过SHOW TABLE STATUS查看table状态,注意Collationutf8_general_ci,对应的字符集为utf8

MariaDB [blog]> SHOW TABLE STATUS FROM test_schema \G;
*************************** 1. row ***************************
           Name: test_table
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 11534336
 Auto_increment: NULL
    Create_time: 2018-01-09 16:10:42
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)

方式二:查看information_schema.TABLES的信息。

mysql> USE test_schema;
mysql> SELECT TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = "test_schema" AND TABLE_NAME = "test_table";
+-----------------+
| TABLE_COLLATION |
+-----------------+
| utf8_general_ci |
+-----------------+

方式三:通过SHOW CREATE TABLE确认。

mysql> SHOW CREATE TABLE test_table;
+------------+----------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                   |
+------------+----------------------------------------------------------------------------------------------------------------+
| test_table | CREATE TABLE `test_table` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

十、相关链接

10.1 Character Set Support

https://dev.mysql.com/doc/refman/5.7/en/charset.html

总结

上述所述是我给我们介绍的带你4分钟读懂MySQL字符集设置,希望对大家具有协理,纵然大家有其他疑问请给本人留言,作者会及时还原大家的。在此也极度多谢大家对帮客之家网站的援助!

http://www.bkjia.com/Mysql/1281028.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1281028.htmlTechArticle带你5分钟读懂MySQL字符集设置,mysql字符集
一、内容概述
在MySQL的行使进度中,精通字符集、字符序的概念,以及不一致设置对数码存储、比…

3、column字符集/排序规则规定

假设CHARACTER SETCOLLATE的值分别是charset_namecollation_name

  • 如果charset_namecollation_name均明显,则字符集、字符序以charset_namecollation_name为准。
  • 只眼看了charset_namecollation_name未明显,则字符集为charset_name,字符序为charset_name的暗中认同字符序。
  • 只眼看了collation_namecharset_name未明朗,则字符序为collation_name,字符集为collation_name关系的字符集。
  • charset_namecollation_name均未鲜明,则以table的字符集、字符序为准。

带您肆分钟读懂MySQL字符集设置,mysql字符集

二,查看匡助的字符序

就像的,可以由此如下格局查看MYSQL支持的字符序。

方式一:通过SHOW COLLATION拓展查看。

可以见见,utf8字符集有当先10种字符序。通过Default的值是还是不是为Yes,判断是或不是暗中认同的字符序。

mysql> SHOW COLLATION WHERE Charset = 'utf8';
+--------------------------+---------+-----+---------+----------+---------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin                 | utf8    |  83 |         | Yes      |       1 |
...略

方式二:查询information_schema.COLLATIONS

mysql> USE information_schema;
mysql> SELECT * FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8";
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME           | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci          | utf8               |  33 | Yes        | Yes         |       1 |
| utf8_bin                 | utf8               |  83 |            | Yes         |       1 |
| utf8_unicode_ci          | utf8               | 192 |            | Yes         |       8 |

六、table的字符集、字符序

开创表、修改表的语法如下,可通过CHARACTE福特ExplorerSET、COLLATE设置字符集、字符序。

CREATE TABLE tbl_name (column_list)
 [[DEFAULT] CHARACTER SET charset_name]
 [COLLATE collation_name]]

ALTER TABLE tbl_name
 [[DEFAULT] CHARACTER SET charset_name]
 [COLLATE collation_name]

1、创立table并指定字符集/字符序

事例如下,指定字符集为utf8,字符序则使用私自认同的。

CREATE TABLE `test_schema`.`test_table` (
 `id` INT NOT NULL COMMENT '',
 PRIMARY KEY (`id`) COMMENT '')
DEFAULT CHARACTER SET = utf8;

二,查看table的字符集/字符序

如出一辙,有3种格局得以查看table的字符集/字符序。

方式一:通过SHOW TABLE
STATUS查看table状态,注意Collation为utf8_general_ci,对应的字符集为utf8。

MariaDB [blog]> SHOW TABLE STATUS FROM test_schema \G;
*************************** 1. row ***************************
  Name: test_table
  Engine: InnoDB
 Version: 10
 Row_format: Compact
  Rows: 0
 Avg_row_length: 0
 Data_length: 16384
Max_data_length: 0
 Index_length: 0
 Data_free: 11534336
 Auto_increment: NULL
 Create_time: 2018-01-09 16:10:42
 Update_time: NULL
 Check_time: NULL
 Collation: utf8_general_ci
 Checksum: NULL
 Create_options: 
 Comment: 
1 row in set (0.00 sec)

方式二:查看information_schema.TABLES的信息。

mysql> USE test_schema;
mysql> SELECT TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = "test_schema" AND TABLE_NAME = "test_table";
+-----------------+
| TABLE_COLLATION |
+-----------------+
| utf8_general_ci |
+-----------------+

方式三:通过SHOW CREATE TABLE确认。

mysql> SHOW CREATE TABLE test_table;
+------------+----------------------------------------------------------------------------------------------------------------+
| Table | Create Table             |
+------------+----------------------------------------------------------------------------------------------------------------+
| test_table | CREATE TABLE `test_table` (
 `id` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

3、table字符集、字符序如何显然

一旦CHARACTE陆风X8SET、COLLATE的值分别是charset_name、collation_name。如若成立table时:

明确了charset_name、collation_name,则采用charset_name、collation_name。
只肯定了charset_name,但collation_name未明朗,则字符集拔取charset_name,字符序采取charset_name对应的专断认同字符序。

只眼看了collation_name,但charset_name未显然,则字符序采取collation_name,字符集接纳collation_name关联的字符集。

charset_name、collation_name均未明朗,则应用数据库的字符集、字符序设置。

八、采纳:曾几何时设置字符集、字符序

相似的话,可以在多个地方开展布局:

  1. 创立数据库的时候进行配备。
  2. mysql server运转的时候举办陈设。
  3. 从源码编译mysql的时候,通过编译参数举行布署

八、选拔:曾几何时设置字符集、字符序

相似的话,可以在多少个地点开展布局:

创制数据库的时候进行配备。

mysql server运行的时候进行陈设。

从源码编译mysql的时候,通过编译参数举行安排

一,格局一:创立数据库的时候进行安排

那种办法相比较灵敏,也正如有限接济,它不借助于于暗中同意的字符集/字符序。当你成立数据库的时候指定字符集/字符序,后续创造table、column的时候,固然不尤其指定,会持续对应数据库的字符集/字符序。

CREATE DATABASE mydb
 DEFAULT CHARACTER SET utf8
 DEFAULT COLLATE utf8_general_ci;

二,方式二:mysql server运维的时候进行布置

可以添加以下配置,那样mysql
server运转的时候,会对character-set-server、collation-server举行配置。

当你通过mysql
client创制database/table/column,且并未出示注明字符集/字符序,那么就会用character-set-server/collation-server作为默许的字符集/字符序。

除此以外,client、server连接时的字符集/字符序,依然需求通过SET
NAMES举行安装。

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

三,方式三:从源码编译mysql的时候,通过编译参数进行安装

编译的时候假诺指定了-DDEFAULT_CHARSET和-DDEFAULT_COLLATION,那么:

始建database、table时,会将其当作默许的字符集/字符序。

client连接server时,会将其看作默认的字符集/字符序。(不用单独SET
NAMES)

shell> cmake . -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci

四、server的字符集、字符序

用途:当您成立数据库,且尚未点名字符集、字符序时,server字符集、server字符序就会作为该数据库的暗中认可字符集、排序规则。

哪些指定:MySQL服务运行时,可由此命令行参数指定。也足以因而布署文件的变量指定。

server默许字符集、字符序:在MySQL编译的时候,通过编译参数指定。

character_set_servercollation_server各自对应server字符集、server字符序。

3、database字符集、字符序是怎么明确的

  • 创办数据库时,指定了CHARACTER SETCOLLATE,则以对应的字符集、排序规则为准。
  • 开创数据库时,倘若没有点名字符集、排序规则,则以character_set_servercollation_server为准。

2、运营服务时指定

可以在MySQL服务运转时,指定server字符集、字符序。如不指定,暗许的字符序分别为latin1latin1_swedish_ci

mysqld --character-set-server=latin1 \
       --collation-server=latin1_swedish_ci

独立指定server字符集,此时,server字符序为latin1的暗许字符序latin1_swedish_ci

mysqld --character-set-server=latin1

3、字符序的命名规范

字符序的命名,以其对应的字符集作为前缀,如下所示。比如字符序utf8_general_ci,标明它是字符集utf8的字符序。

越来越多规则可以参考
合法文档

MariaDB [information_schema]> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM COLLATIONS WHERE CHARACTER_SET_NAME="utf8" limit 2; 
+--------------------+-----------------+
| CHARACTER_SET_NAME | COLLATION_NAME  |
+--------------------+-----------------+
| utf8               | utf8_general_ci |
| utf8               | utf8_bin        |
+--------------------+-----------------+
2 rows in set (0.00 sec)

二,查看数据库的字符集/字符序

有3种方法可以查阅数据库的字符集/字符序。

例子一:查看test_schema的字符集、排序规则。(必要切换专断认同数据库)

mysql> use test_schema;
Database changed
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8                     | utf8_general_ci      |
+--------------------------+----------------------+
1 row in set (0.00 sec)

事例二:也得以透过上面发号施令查看test_schema的字符集、数据库(不须要切换暗许数据库)

mysql> SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME  FROM information_schema.SCHEMATA WHERE schema_name="test_schema";
+-------------+----------------------------+------------------------+
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+-------------+----------------------------+------------------------+
| test_schema | utf8                       | utf8_general_ci        |
+-------------+----------------------------+------------------------+
1 row in set (0.00 sec)

事例三:也可以通过查看成立数据库的话语,来查阅字符集。

mysql> SHOW CREATE DATABASE test_schema;
+-------------+----------------------------------------------------------------------+
| Database    | Create Database                                                      |
+-------------+----------------------------------------------------------------------+
| test_schema | CREATE DATABASE `test_schema` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)

五、database的字符集、字符序

用途:指定数据库级其他字符集、字符序。同多少个MySQL服务下的数据库,可以分级指定不一样的字符集/字符序。

一、内容概述

在MySQL的利用进程中,领悟字符集、字符序的概念,以及分裂设置对数码存储、比较的影响特别主要。不少同校在日常工作中碰着的“乱码”难点,很有大概就是因为对字符集与字符序的精通不做到、设置错误造成的。

本文规行矩步,分别介绍了之类内容:

  1. 字符集、字符序的基本概念及关联
  2. MySQL扶助的字符集、字符序设置级,各设置级别之间的联络
  3. server、database、table、column级字符集、字符序的查看及安装
  4. 有道是曾几何时设置字符集、字符序

七、column的字符集、排序

类型为CHAPAJERO、VA奔驰G级CHALAND、TEXT的列,可以指定字符集/字符序,语法如下:

col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

一,情势一:创制数据库的时候进行安顿

那种措施相比灵敏,也正如保障,它不借助于默许的字符集/字符序。当你创制数据库的时候指定字符集/字符序,后续创造table、column的时候,假设不优良指定,会接二连三对应数据库的字符集/字符序。

CREATE DATABASE mydb
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

三,table字符集、字符序怎么着鲜明

假设CHARACTER SETCOLLATE的值分别是charset_namecollation_name。就算创造table时:

  • 明确了charset_namecollation_name,则采用charset_namecollation_name
  • 只肯定了charset_name,但collation_name未明朗,则字符集拔取charset_name,字符序接纳charset_name相应的暗中同意字符序。
  • 只眼看了collation_name,但charset_name未明朗,则字符序选取collation_name,字符集拔取collation_name涉嫌的字符集。
  • charset_namecollation_name均未明显,则利用数据库的字符集、字符序设置。

3、配置文件指定

皇冠现金app,除却在命令行参数里指定,也可以在安顿文件里指定,如下所示。

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

5、编译时指定暗中同意字符集、字符序

character_set_servercollation_server的暗中认可值,可以在MySQL编译时,通过编译选项指定:

cmake . -DDEFAULT_CHARSET=latin1 \
           -DDEFAULT_COLLATION=latin1_german1_ci

贰,查看column的字符集/字符序

事例如下:

mysql> SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test_schema" AND TABLE_NAME="test_table" AND COLUMN_NAME="char_column";
+--------------------+-----------------+
| CHARACTER_SET_NAME | COLLATION_NAME  |
+--------------------+-----------------+
| utf8               | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

九、写在前面

本文较为详细地介绍了MySQL中字符集、字符序相关的始末,那有些内容主要针对的是数额的存储与比较。其实还有很关键的一片段内容还没涉及:针对一连的字符集、字符序设置。

鉴于一而再的字符集、字符序设置不当造成的乱码难题也万分多,那部分内容展开来讲内容也不少,放在下一篇小说举办讲解。

篇幅所限,有个别内容尚未细讲,感兴趣的同室欢迎交流,大概查看官方文档。如有错漏,敬请指出。

三、MySQL协理的字符集、字符序

MySQL支持多样字符集 与 字符序。

  1. 贰个字符集对应至少一种字符序(一般是1对多)。
  2. 多个不等的字符集不只怕有同一的字符序。
  3. 每种字符集都有暗许的字符序。

上面说的比较空虚,大家看下前面多少个小节就领会怎么回事了。

六、table的字符集、字符序

开创表、修改表的语法如下,可透过CHARACTER SETCOLLATE设置字符集、字符序。

CREATE TABLE tbl_name (column_list)
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]]

ALTER TABLE tbl_name
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]

贰,格局二:mysql server运维的时候举办陈设

可以加上以下配置,那样mysql
server运营的时候,会对character-set-server、collation-server举行安顿。

当您通过mysql
client成立database/table/column,且从未显得声明字符集/字符序,那么就会用character-set-server/collation-server作为默许的字符集/字符序。

别的,client、server连接时的字符集/字符序,依然要求经过SET
NAMES举办设置。

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

1、查看server字符集、字符序

个别对应character_set_servercollation_server七个系统变量。

mysql> SHOW VARIABLES LIKE "character_set_server";
mysql> SHOW VARIABLES LIKE "collation_server";

十、相关链接

10.1 Character Set Support
https://dev.mysql.com/doc/refman/5.7/en/charset.html

相关文章