IT技术博客大学习 共学习 共进步

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

ilonng 2009-10-12 10:02:34 浏览 3,063 次

     默认情况下,我们可以在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. ORACEL RAC 字符集 (阅读 5,363)
  2. linux下vim的编译以及终端乱码的最终解决方案 (阅读 4,743)
  3. 区分一个包含汉字的字符串是 UTF-8 还是 GBK (阅读 4,041)
  4. oracle查看字符集 修改字符集 (阅读 3,845)
  5. 如何在MYSQL5.5只支出utf8环境下正常使用GBK网站 (阅读 3,704)
  6. java中文乱码解决之道(一)—–认识字符集 (阅读 3,643)
  7. mysql latin1转utf8 的两种方法 (阅读 3,346)
  8. mysql字符集和校验规则概念小介 (阅读 3,242)
  9. mysql连接通道中的字符集和校验规则 (阅读 2,942)
  10. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB** (阅读 2,886)