IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

mysql字符集与校验规则的设置

ilonng 2009-10-12 10:02:34 累计浏览 3,186 次
本机暂存

     默认情况下,我们可以在4个级别分别设定mysql的字符集和校验规则,分别是server、database、table和column。实际上,我们甚至还可以单独对一串字符串设定其字符集和校验规则。下面就分别来对四个级别的设定说明一下:
    server:
    在启动mysql服务的时候,可以指定mysql server的字符集和校验规则,通过如下方式:
mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci
    如果不亲自指定它们,那么mysql就会使用默认值。一般是latin1和latin1_swedish_ci。当然这个默认值是可以修改的,但是方法只有一种,那就是重编译源代码。采用如下方式:
./configure --with-charset=gbk  --with-collation=gbk_bin
    如何查询当前的server的字符集和校验规则的值,可以查看系统参数character_set_server和collation_server:
mysql> show variables like \'character_set_server%\';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set (0.00 sec)

    mysql> show variables like \'collation_server%\';
+------------------+-------------------+
| Variable_name    | Value             |
+------------------+-------------------+
| collation_server | latin1_swedish_ci |
+------------------+-------------------+
1 row in set (0.00 sec)
   
    server的字符集和校验规则的唯一作用就是,当database的字符集和校验规则没有指定的时候,就默认使用server的对应值。

     database:
    我们在创建和修改数据库的时候,可以指定其字符集和校验规则:
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];
    对应查看当前数据库的字符集和校验规则的系统参数是\'character_set_database\'和\'collation_database\',如下:
mysql> show variables like \'character_set_database\';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | gbk   |
+------------------------+-------+
1 row in set (0.00 sec)

    mysql> show variables like \'collation_database\';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| collation_database | gbk_bin |
+--------------------+---------+
1 row in set (0.00 sec)

     数据库的字符集和校验规则的作用有二,其一是当没有在表级别知道它们,那么默认就使用数据库基本的值;其二是在“load data infile”时也起到了作用。

     table:
    在创建表或者修改表结构的时候,我们可以通过如下方式指定这个表的字符集和校验规则:
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]

     column:
    具体的表的具体的某个字段,我们也可以指定其字符集和校验规则,如下:
col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name] [COLLATE collation_name]

     那么,这四个级别的字符集和校验规则的指定(级别高低server>database>table>column),mysql最终以何种形式来存储和显示字符串的呢?
1、本级别中,如果同时指定character set和collate,那么就使用指定的值;
2、本级别中,只指定character set而没有指定collate,那么就使用指定的character set值和其对应的默认的collation值;
3、本级别中,只指定collate而没有指定character set,那么就使用指定的collation值和其所对应的character set值;
4、本级别中,都没有指定这2个值,那么默认就使用上一级别的对应的值。

     国家字符集:
    mysql中国家字符集的概念,其表示使用预先定义的字符集,在mysql5.1中使用utf8作为其预先的定义的字符集。
    因此,下面几种类型的定义,其实是等效的:
CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)
    下面几种类型也是等效的:
VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)

     字符串的字符集和校验规则的设置问题,请稍等!

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,253)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,401)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,352)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,909)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)
  10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)