从此不怕MYSQL字符集的问题

首先给出了字符集和校验的概念,这对理解后文很重要。》》查阅手册

可以使用
        mysql> SHOW CHARACTER SET;
对字符集进行查看,种类繁多。

可以使用
        mysql> SHOW COLLATION LIKE 'latin1%';
对latin1字符集校验进行查看,种类同样很多,都以$1_$2_$3的形式出现,$1为使用的字符集,$2为使用国家,也可能是多国语言general,$3

一般设置为ci,cs,bin。ci是不区分大小写的,cs是大小写敏感的,bin是二原结束

 

 

设置字符集和校验分为客户端和服务器端
服务器端的字符集和校验可分为四层,高层服务器字符集和校验,次高层数据库字符集和校验,低层表字符集和校验,最低层列字符集和校验

。分别以1,2,3,4代表。
1是在安装时设置好的,如果默认要改变要重新安装,但在启动mysqld的时候可以设置
     shell> mysqld --default-character-set=latin1 /
                --default-collation=latin1_swedish_ci

同时设置character_set_servercollation_server系统变量的值为上面定义的
2可以在创建时定义,也可以在以后设置
     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]
     CREATE DATABASE db_name    
          DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
设置character_set_databasecollation_database变量的值,如果缺省看看手册就懂了,很简单。下面介绍的也一样
3同上
     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]

4同上
     col_name {CHAR | VARCHAR | TEXT} (col_length)    
          [CHARACTER SET charset_name [COLLATE collation_name]]
     CREATE TABLE Table1
     (
          column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci
     );

客户端的连接同样要设置字符集和校验,服务器需要知道,你使用的是什么字符集,服务器接到数据后要转换成什么字符集和返回什么字符集

,如果需要改变可能会丢失字节。服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。服务器使用

character_set_connectioncollation_connection系统变量进行转换.character_set_results变量指示服务器返回查询结果到客户端使用的

字符集。
可以如下设置客户端字符集
     SET NAMES 'charset_name'
SET NAMES 'x'语句与这三个语句等价:
     mysql> SET character_set_client = x;
     mysql> SET character_set_results = x;
     mysql> SET character_set_connection = x;(
这就是为啥PHP要设置字符集的原因啦)
一直设置很烦啦,可以在my.ini里设置
     [mysql]
     default-character-set=utf8

 

 


手册上还介绍了在查询时显示的设置字符集和校验character_set_connectioncollation_connection的方法不太常用,提一下,详细看手册吧
        SELECT _latin1'string' COLLATE latin1_danish_ci;
这是改变校验的

        SELECT K FROM t1 ORDER BY k COLLATE latin1_german2_ci;

 

 

mysql提供了字符集转换的函数CONVERT(),CAST()
         CONVERT(expr USING transcoding_name)
         SELECT CONVERT(latin1field USING utf8) FROM latin1table;

 

         CAST(character_string AS character_data_type CHARACTER SET charset_name)
         SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

 

也为SHOW提供了查看数据库,表和列的字符集
         mysql> SHOW CREATE DATABASE databasename;
         mysql> SHOW CREATE TABLE tablename;
         mysql> SHOW FULL COLUMNS FORM columnsname/G
;/G看的比较清楚,列不多可以不加啦

上面提供了很多变量可以用SHOW查看
         mysql> SHOW VARIABLES LIKE 'character_set_client';
         mysql> SHOW VARIABLES LIKE 'character_set_system';
这句是查看mysql返回信息的字符集,默认是utf8的

 

 

MYSQL 5.1新特性:mysql分配了一直国际特有字符集,其实就是utf8啦,utf8现在是4字节变长,但在mysql他是3字节存的,所有如果用了

char(10)就表示要分配30个字节,因为这是最大长度嘛。varchar是变长所以用的字节就少,但有人说char速度快。
 
 新特性就是下面类型声明是等价的:
 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)

比较方便啦

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值