13、设置默认字符集和校对规则
MySQL 服务器可以支持多种字符集,在同一台服务器、同一个数据库甚至同一个表的不同字段中,都可以使用不同的字符集。Oracle 等其它数据库管理系统都只能使用相同的字符集,相比之下,MySQL 明显存在更大的灵活性。
MySQL 的字符集和校对规则有 4 个级别的默认设置,
即服务器级、
数据库级、
表级、
字段级。
它们分别在不同的地方设置,作用也不相同。
服务器字符集和校对规则
修改服务器默认字符集和校对规则的方法如下。
1)可以在 my.ini 配置文件中设置服务器字符集和校对规则,添加内容如下:
[mysqld]
character-set-server=字符集名称
2)连接 MySQL 服务器时指定字符集:
mysql --default-character-set=字符集名称 -h 主机IP地址 -u 用户名 -p 密码
如果没有指定服务器字符集,MySQL 会默认使用 latin1 作为服务器字符集。
如果只指定了字符集,没有指定校对规则,MySQL 会使用该字符集对应的默认校对规则。
如果要使用字符集的非默认校对规则,需要在指定字符集的同时指定校对规则。
可以用 SHOW VARIABLES LIKE 'character_set_server'
和 SHOW VARIABLES LIKE 'collation_server'
命令查询当前服务器的字符集和校对规则。
mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+--------+
| Variable_name | Value |
+----------------------+--------+
| character_set_server | gbk |
+----------------------+--------+
1 row in set, 1 warning (0.01 sec)
mysql> SHOW VARIABLES LIKE 'collation_server';
+------------------+-------------------+
| Variable_name | Value |
+------------------+-------------------+
| collation_server | gbk_chinese_ci |
+------------------+-------------------+
1 row in set, 1 warning (0.01 sec)
数据库字符集和校对规则
数据库的字符集和校对规则在创建数据库时指定,也可以在创建完数据库后通过 ALTER DATABASE 命令进行修改。
设置数据库字符集的规则如下:
- 如果指定了字符集和校对规则,则使用指定的字符集和校对规则;
- 如果指定了字符集没有指定校对规则,则使用指定字符集的默认校对规则;
- 如果指定了校对规则但未指定字符集,则字符集使用与该校对规则关联的字符集;
- 如果没有指定字符集和校对规则,则使用服务器字符集和校对规则作为数据库的字符集和校对规则。
为了避免受到默认值的影响,推荐在创建数据库时指定字符集和校对规则。
可以使用 SHOW VARIABLES LIKE 'character_set_database'
和 SHOW VARIABLES LIKE 'collation_database'
命令查看当前数据库的字符集和校对规则。
mysql> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set, 1 warning (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_database';
+--------------------+-------------------+
| Variable_name | Value |
+--------------------+-------------------+
| collation_database | latin1_swedish_ci |
+--------------------+-------------------+
1 row in set, 1 warning (0.00 sec)
表字符集和校对规则
表的字符集和校对规则在创建表的时候指定,也可以在创建完表后通过 ALTER TABLE 命令进行修改,
同样,如果表中已有记录,修改字符集后,原有的记录不会按照新的字符集重新存放。表的字段仍然使用原来的字符集。
设置表的字符集规则和设置数据库字符集的规则基本类似:
- 如果指定了字符集和校对规则,使用指定的字符集和校对规则;
- 如果指定了字符集没有指定校对规则,使用指定字符集的默认校对规则;
- 如果指定了校对规则但未指定字符集,则字符集使用与该校对规则关联的字符集;
- 如果没有指定字符集和校对规则,使用数据库字符集和校对规则作为表的字符集和校对规则。
为了避免受到默认值的影响,推荐在创建表的时候指定字符集和校对规则。
可以使用 SHOW CREATE TABLE
命令查看当前表的字符集和校对规则,SQL 语句和运行结果如下:
mysql> SHOW CREATE TABLE tb_students_info \G
*************************** 1. row ***************************Table: tb_students_info
Create Table: CREATE TABLE `tb_students_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`height` float DEFAULT NULL,`course_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
列字符集和校对规则
MySQL 可以定义列级别的字符集和校对规则,主要是针对相同表的不同字段需要使用不同字符集的情况。一般遇到这种情况的几率比较小,这只是 MySQL 提供给我们一个灵活设置的手段。
列字符集和校对规则的定义可以在创建表时指定,或者在修改表时调整。语法格式如下:
ALTER TABLE 表名 MODIFY 列名 数据类型 CHARACTER SET 字符集名;
例 1
修改 tb_students_info 表中 name 列的字符集,并查看。SQL 语句和运行结果如下:
mysql> ALTER TABLE tb_students_info MODIFY name VARCHAR(10) CHARACTER SET gbk;
mysql> SHOW CREATE TABLE tb_students_info \G
*************************** 1. row ***************************Table: tb_students_info
Create Table: CREATE TABLE `tb_students_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) CHARACTER SET gbk DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`height` float DEFAULT NULL,`course_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
结果显示,name 列字符集修改成功。
如果在创建列的时候没有特别指定字符集和校对规则,默认使用表的字符集和校对规则。
连接字符集和校对规则
上面所讲的 4 种设置方式,确定的都是数据保存的字符集和校对规则。实际应用中,还需要设置客户端和服务器之间交互的字符集和校对规则。
对于客户端和服务器的交互操作,MySQL 提供了 3 个不同的参数:character_set_client
、character_set_connection
和 character_set_results
,分别代表客户端
、连接
和返回结果的字符集
。通常情况下,这 3 个字符集是相同的,这样可以确保正确读出用户写入的数据,尤其是中文字符。字符集不同时,容易导致写入的记录不能正确读出。
设置客户端和服务器连接的字符集和校对规则有以下几种方法:
1)在 my.ini 配置文件中,设置以下语句:
[mysql]
default-character-set=gbk
这样服务器启动后,所有连接默认使用 GBK 字符集进行连接。
2)可以通过以下命令来设置连接的字符集和校对规则,这个命令可以同时修改以上 3 个参数(character_set_client、character_set_connection 和 character_set_results)的值。
SET NAMES gbk;
使用这个方法可以“临时一次性地”修改客户端和服务器连接时的字符集为 gbk。
3)MySQL 还提供了下列 MySQL 命令“临时地”修改 MySQL“当前会话的”字符集和校对规则。
set character_set_client = gbk;
set character_set_connection = gbk;
set character_set_database = gbk;
set character_set_results = gbk;
set character_set_server = gbk;
set collation_connection = gbk_chinese_ci;
set collation_database = gbk_chinese_ci;
set collation_server = gbk_chinese_ci;
13、设置默认字符集和校对规则相关推荐
- MySQL字符集和校对规则(Collation)
MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常 ...
- mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- mysql 字符集和校对规则
为什么80%的码农都做不了架构师?>>> 1,常规字符集及校对 假设我们有一个字母表使用了四个字母:'A'.'B'.'a'.'b'.我们为每个字母赋予一个数值:'A'=0,'B ...
- 11、MySQL字符集和校对规则详解
在讲解字符集和校对规则之前,我们先来简单了解一下字符.字符集和字符编码. 字符(Character)是计算机中字母.数字.符号的统称,一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点 ...
- mysql连接校对_mysql字符集和校对规则(Mysql校对集)
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于 ...
- mysql字符集和校对规则
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下. 简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用 ...
- MySQL数据库——MySQL字符集和校对规则详解
在讲解字符集和校对规则之前,我们先来简单了解一下字符.字符集和字符编码. 字符(Character)是计算机中字母.数字.符号的统称,一个字符可以是一个中文汉字.一个英文字母.一个阿拉伯数字.一个标点 ...
- mysql干货——数据库字符集和校对规则详解
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是字符集 字符是多个文字和符号的总称,包括各个国家的文字.标点符号.图形符号.数字等.字符集多个字符的集合. 字符集合 ...
- 12、查看字符集和校对规则
本节主要介绍查看字符集和校对规则的几种方法. 在 MySQL 中,查看可用字符集的命令和执行过程如下: mysql> SHOW CHARACTER set; +----------+------ ...
最新文章
- 根据曲线上的采样点拟合直线
- php动态网页简书,LAMP架构部署和动态网站环境的配置
- python-常用函数模块学习-subprocess
- leetcode 28. Implement strStr() 实现strStr()
- vim补全html标签,vim括号引号html标签自动补全
- 七十八、Antd 实现 TodoList 页面布局和Redux入门
- request获取页面html内容,request、request-promise、cheerio抓取网页内容
- 【读书笔记《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)...
- 实践分享:开始用Cordova+Ionic+AngularJS开发App
- Python猜字游戏(用函数)(最新版)
- DP学习之USACO货币系统
- 7月共处理钓鱼网站1921个:非CN域名达1911 个
- Android模拟器中添加SD卡(转)
- tcp协议及工作原理浅析_详解TCP/IP网络协议栈底层原理到徒手实现
- 矩阵运算中的trick
- 计算机辅助翻译 教学大纲,《计算机辅助翻译》本科课程教学大纲翻译本科.doc...
- 运维服务级别管理流程
- 树莓派4B配置远程桌面软件 Teamviewer(解决报错)
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
- Java笔记——Java 实现金额小写转大写
热门文章
- 成功解决tensorboard调用events.out.tfevents文件得到网址出现No dashboards are active for the current data set问题
- 4.1 Tensorflow:卷积函数
- 日期时间类,按特定格式显示日期时间
- Android Studio 添加 Genymotion插件
- 【转】最小编辑距离 算法原理
- Object C学习笔记12-集合
- nrf51822-提高nordic ble数据发送速率
- 逻辑分析仪抓取波形参数设置
- python 多线程 全站小说_多线程下载小说
- 区块链BaaS云服务(28)TOP Network 之P2P 网络