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 命令进行修改,具体操作可阅读学习《MySQL修改数据库》一节。
需要注意的是,如果数据库里已经存在数据,修改字符集后,已有的数据不会按照新的字符集重新存放,所以不能通过修改数据库的字符集来修改数据的内容。在《MySQL修改字符集步骤详解》一节我们介绍了如何修改已存在数据字符集的方法。
设置数据库字符集的规则如下:
如果没有指定字符集和校对规则,则使用服务器字符集和校对规则作为数据库的字符集和校对规则。
可以使用 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 命令进行修改,具体操作可阅读学习《MySQL修改数据表》一节。
同样,如果表中已有记录,修改字符集后,原有的记录不会按照新的字符集重新存放。表的字段仍然使用原来的字符集。
设置表的字符集规则和设置数据库字符集的规则基本类似:
可以使用 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 字符集名;
修改 tb_students_info 表中 name 列的字符集,并查看。SQL 语句和运行结果如下:
mysql ALTER TABLE tb_students_info MODIFY name VARCHAR(10) CHARACTER SET gbk; Query OK, 11 rows affected (0.11 sec) Records: 11 Duplicates: 0 Warnings: 0 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;
23686.html
htmlmysql相关文章
- 如何将excel中的数据导入mysql_将外部sql文件导入MySQL步骤
- MySQL分割:简单快捷的数据库设置方式(mysql剪标)
- MySQL数据库中布尔类型的应用(mysql数据库布尔类型)
- MySQL双机热备,保证数据安全不间断(mysql双机热备)
- 出难题MySQL发出挑战:一场艰难的考验(mysql某天)
- MySQL远程访问设置及安全密码实施(mysql远程访问密码)
- MySQL中修改默认日期系统设置(系统默认日期mysql)
- 设置MySQL字符集的正确方法(设置mysql的字符集)
- 使用CI框架快速连接MySQL数据库(ci连接mysql)
- MySQL设置字符集:步骤及其指导(mysql设置字符集编码)
- MySQL设置表字符集:快速、准确的方法(mysql设置表字符集)
- 实现Mac上MySQL环境的轻松设置(mac设置mysql)
- 深入理解MySQL字符类型:如何选择合适的字符集和校对规则(mysql字符类型)
- 【招聘】MySQL工程师,助力大数据未来发展!(mysql工程师招聘)
- 使用 MySQL 数据库进行高效搜索的最佳方法(mysql数据库搜索)
- 如何在 Mac 上设置 MySQL 远程访问(mac mysql 远程)
- MySQL卡硬盘性能分析(mysql 卡硬盘)
- MySQL如何修改自增字段的主键设置(mysql中修改主键自增)
- 学习MySQL如何设置主外键约束(mysql两表设置主外键)
- MySQL实现两个表字段相加的方法(mysql两表字段相加)
- MySQL中如何设置自增ID(c mysql id设置)
- MySQL实现三表关联修改(mysql 三表关联修改)
- MySQL数据库中关于三级地区的设置和应用方法(mysql三级地区)
- MySQL安全设置mysqlsecure的使用方法(mysql_secure)
- MySQL支持不同字段的数据类型和属性设置(mysql 不同字段)
- MySQL下载及账户设置步骤全解析(mysql下载账号步骤)
- MySQL下划线转大写的实用技巧(mysql下划线转大写)
- MySQL数据库中的自增长字段设置方法及应用(mysql上自增长)