千家信息网

mysql学习之-字符集选定,修改。

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,环境:5.6基础概念:字符(Character)是指人类语言中最小的表义符号。例如'A'、'B'等;编码(Encoding)是指给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符.例如,我
千家信息网最后更新 2026年11月01日mysql学习之-字符集选定,修改。

环境:5.6

基础概念:

字符(Character)是指人类语言中最小的表义符号。例如'A'、'B'等;
编码(Encoding)是指给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符.例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码;
字符集(Character Set)是指字符和编码对组成的集合。
字符序(Collation)是指在同一字符集内字符之间的比较规则。
MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序"utf8_general_ci"下,字符"a"和"A"是等价的;

mysql> show variables like 'character%'; --查看MySQL字符集设置 MySQL字符集设置
+--------------------------+----------------------------+
| Variable_name | Value | ? 系统变量:
+--------------------------+----------------------------+
| character_set_client | utf8 | - character_set_client:客户端来源数据使用的字符集
| character_set_connection | utf8 | - character_set_connection:连接层字符集
| character_set_database | latin1 | - character_set_database:当前选中数据库的默认字符集
| character_set_filesystem | binary | - character_set_filesystem:文件系统字符集
| character_set_results | utf8 | - character_set_results:查询结果字符集
| character_set_server | latin1 | - character_set_server:内部操作字符集(服务器的字符集)
| character_set_system | utf8 | - character_set_system:系统元数据(字段名等)字符集
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

详细解释:
1.
服务器(数据)端的字符集和collation,可以分成四级逐层指定--server, database, table, column。当MySQL存取位于某一列(column)的数据时,如果column的字符集和collation没有指定,就会向上追溯table的;如果table也没有指定字符集和collation,就以database的字符集和collation作为默认值;如果database仍旧没有指定,那么就以服务器的字符集和collation作为默认值。

2.
server的字符集和collation的默认值又是从哪里来的呢?答案是,配置文件(my.ini)和mysqld(或者mysqld-nt)的命令行参数中都可以指定。如果不幸的,你根本没有在my.ini或者命令行中指定,那么MySQL就会使用编译MySQL时指定的默认字符集--latin1。

3.
数据字符集转换过程:
character_set_client->character_set_connection->character_set_(column,table,database,server)->character_set_results

MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)安装 MySQL选择多语言支持,安装程序会自动在配置文件中把default_character_set 设置为 UTF-8,保证缺省情况下所有的数据库所有表的所有列的都用 UTF-8 存储。

mysql> create database demo; --创建数据库未指定字符集,使用默认字符集创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| demo |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)

mysql> show create database demo \G; --查看创建数据库时使用的什么字符集。
*************************** 1. row ***************************
Database: demo
Create Database: CREATE DATABASE `demo` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> create database demo default character set gbk collate gbk_chinese_ci; --指定字符集创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> show create database demo;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| demo | CREATE DATABASE `demo` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create database demo2 default character set utf8 collate utf8_general_ci; --指定字符集创建数据库
Query OK, 1 row affected (0.00 sec)

修改字符集 :

方法一:(永久生效)
1.查找/etc目录下是否有my.cnf文件;
#ls -l | grep my.cnf (在/etc下查找是否有my.cnf文件存在)
2.如果没有就要从/usr/share/mysql,拷贝一个到/etc 下,在/usr/share/mysql目录下有五个后缀为.cnf的文件,分别是 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf ;从中随便拷贝一个到/etc目录下并将其改为my.cnf文件,我选择的是my-medium.cnf :
#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
3.修改my.cnf文件,在该文件中的两个地方加上 default-character-set=utf8([client] [mysql])、
在 [mysqld] 中添加character-set-server=utf8

范例(红色为添加部分):
[mysqld]
character-set-server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql] (注意是小写,博客问题格式有问题)
default-character-set=utf8
[client]
default-character-set=utf8

验证:查看数据库字符集
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
成功!

方法二: (临时生效)
通过MySQL命令行修改:

mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)

总结:
1. 如果安装mysql时未指定数据库字符集,则默认数据库字符集为 latin1 。
2. 选定数据库字符集时需要根据开发程序选定字符集。


字符 字符集 数据 数据库 文件 配置 命令 数值 编码 中指 服务器 目录 程序 系统 服务 编译 参数 名称 大小 拷贝 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 喔噻互联网科技 腾讯科技 互联网女皇 美国互联网黑科技 互联网科技公司介绍 无锡溥仪互联网科技有限公司 湖南洣水互联网科技有限公司扣款 团飞科技与伯堂互联网服务平台 互联网公司科技股 中国航天科技大学国际工业互联网 崇明区互联网教育科技售后服务 互联网媒体平台算高科技产业 互联网科技人工智能实验室 互联网科技的全部知识 高科技互联网套路 北京市互联网新科技 富国互联网科技002692 从那以后互联网科技有限公司 风投北京互联网科技 万物互联网智能科技 互联网高科技 圆梦互联网科技 易通互联网络科技有限公司 佰商互联网科技有限公司 中国科技互联网公司收入 岳阳华臻互联网科技有限公司 黑科技闪耀互联网之光 互联网金融科技公司的优势 中国科技和美国互联网 兰石爱特工业互联网科技分公司
0