千家信息网

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

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

基础概念:


字符(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安全错误 数据库的锁怎样保障安全 数据库创建教师表的命令 mysql给用户授予某数据库权限 讯道网络技术有限公司 关系型数据库和分布式数据库 项目计划进度表数据库产品 qqwry数据库 桌面软件开发cs架构 移动公司联网用的软件开发 是一个软件开发公司英文翻译 数据库高校人事管理系统设计 校园网络安全系统的设计与实现 怎么清理考勤机数据库 丹阳久恫网络技术有限公司 2021高考博雅数据库 软件开发写字楼 泗洪县康在顺网络技术服务工作室 游戏服务器作用 新乡金蝶财务软件开发 pccp软件开发 浦东新区信息软件开发厂家价格 教育软件开发公司有哪些 阿里云服务器教育邮箱注册 网络安全法实施自哪时起 服务器网关厂家供货 甘肃电投金昌大数据库 数据库营销行业研究 苏州营销网络技术服务费 找不到mySQL数据库的地址了 魔兽世界只有暗影之月服务器 网络安全一级学科高校
0