在前面 MySQL中英文混合排序最简单的办法 小节里,order by 后面的 collate utf8_unicode_ci; 是什么意思呢?这里需要补充一些mysql字符集、collation的知识。
mysql中对于字符串会按存储类型进行分类,分为二进制、非二进制。
通常二进制存储的都是纯二进制文本,例如mp3、图像文件等,通常设定类型为blob、binary、varbinary。也可存储非二进制文本,通常类型为varchar、char、text 。
通常对于二进制文本的存储,会设计到mysql字符集和collation,下面是字符集和collation的简单介绍。
字符集即为二进制文本的存储类型,通常可通过
mysql > show character set; mysql > show charset;
进行查看,系统会列出所有支持的编码。
我们也可查看某个表的character set(字符集)
mysql > show create table news; | news | CREATE TABLE `news` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `content` text NOT NULL PRIMARY KEY (`news_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1973 DEFAULT CHARSET=utf8 |
utf8即为news table 的character set(charset)
对于字符集的存储后,我们可能需要对字符进行排序,这个时候就用到了collation。collaction是针对字符集来存在的,通常排序有3种不同的方式,ci cs bin
可以使用
mysql > show table status;
查看collation。
我们可以使用
mysql > show collation;
查看所有collation。 或者使用
mysql > show collation like 'latin1%';
查看latin1的collation
通常我们进行order by的时候,都是使用默认collation,如上,使用了默认的 latin1_swedish_ci,我们可以对order by的时候增加特定的collation,如下:
mysql > select * from t order by c collate latin1_general_cs;
我们在对t搜索时使用c的latin1_general_cs进行排序。
我们可以子创建表时候设定表的charset和collate
mysql > create table user ( name varchar(10) character set utf8 collate utf8_general_ci ) engine = innodb default charset = utf8
需要注意的是,我们在设定某个table中column的charset collate时,需要注意table的charset;
我们可以使用collation() charset() 两个方法进行collation character set的获取
可以使用convert进行charset的修改
如下:
mysql > select collation(user()); mysql > select charset(user()); mysql > select convert(user() using binary);
由于convert后会直接显示在终端或返回字符串,可使用如下命令进行验证
mysql > select charset(convert(user() using utf8)); mysql > select collation(convert(user() usiing utf8));
现代魔法 推荐于 2013-02-27 10:23