中文字段排序(MySQL与PostgreSQL)
2011-05-04 11:00
274 查看
在MySQL(5.5.8)与PostgreSQL(9.0)中建立相同的测试表、数据:
create table test_gbk_char(
id int,
username varchar(64)
);
insert into test_gbk_char values(1,'青霞'),(2,'曼玉'),(3,'楚红');
上述步骤完成之后,检查两者之间的字符集及其校验规则:
MySQL(在建表时我没有指定其校验规则及使用默认校验规则):
+--------------------------+-------------------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 |----------------------------------------------------------------------------------------
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
PostgreSQL:
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Chinese (Simplified), Singapore' LC_CTYPE ='Chinese (Simplified), Singapore'
排序查询:
MySQL:
select * from test_gbk_char order by username;2 曼玉3 楚红1 青霞 PostgreSQL:
select * from test_gbk_char order by username;3;"楚红"2;"曼玉"1;"青霞"
从上面的结果可以看出PostgreSQL给出的结果是我想要的。那么造成这种差异的原因是什么呢?其实上文已经给出答案。主要是因为校验规则的不同。
utf8默认的校验规则是utf8_general_ci,它不会按照中文进行排序。如果想要mysql中的结果与PostgreSQL中的结果一样,有多种方法,比如修改表、字段字符集校验规则定义,如果不想修改表结构,可以在查询时进行转换:
select * from test_gbk_char order by CONVERT(username USING gbk) COLLATE gbk_chinese_ci;
3 楚红2 曼玉1 青霞 注:以上的对比查询只是为了说明不同字符校验对中文字段的影响,并不是说mysql与postgreSQL的排序异同。
参考:
http://ggsonic.iteye.com/blog/664921
create table test_gbk_char(
id int,
username varchar(64)
);
insert into test_gbk_char values(1,'青霞'),(2,'曼玉'),(3,'楚红');
上述步骤完成之后,检查两者之间的字符集及其校验规则:
MySQL(在建表时我没有指定其校验规则及使用默认校验规则):
+--------------------------+-------------------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 |----------------------------------------------------------------------------------------
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
PostgreSQL:
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Chinese (Simplified), Singapore' LC_CTYPE ='Chinese (Simplified), Singapore'
排序查询:
MySQL:
select * from test_gbk_char order by username;2 曼玉3 楚红1 青霞 PostgreSQL:
select * from test_gbk_char order by username;3;"楚红"2;"曼玉"1;"青霞"
从上面的结果可以看出PostgreSQL给出的结果是我想要的。那么造成这种差异的原因是什么呢?其实上文已经给出答案。主要是因为校验规则的不同。
utf8默认的校验规则是utf8_general_ci,它不会按照中文进行排序。如果想要mysql中的结果与PostgreSQL中的结果一样,有多种方法,比如修改表、字段字符集校验规则定义,如果不想修改表结构,可以在查询时进行转换:
select * from test_gbk_char order by CONVERT(username USING gbk) COLLATE gbk_chinese_ci;
3 楚红2 曼玉1 青霞 注:以上的对比查询只是为了说明不同字符校验对中文字段的影响,并不是说mysql与postgreSQL的排序异同。
参考:
http://ggsonic.iteye.com/blog/664921
相关文章推荐
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- mysql 按中文字段排序
- mysql 中文字段排序 - 按拼音首字母排序
- mysql中文字段排序
- Mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- php mysql中文排序失效解决方法convert(字段名 USING gbk)
- MySQL 字段排序如何按中文首字母排序
- [乐意黎原创] Mysql使用UTF8编码时让某字段使用中文排序(UTF8按字段拼音首字母排序)
- MySQL 按照拼音给中文字段排序
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- mysql 按中文字段排序
- mysql中utf8编码的中文字段按拼音排序
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- Mysql中文字段排序
- MySQL对含有中文字符的字段排序
- mysql 按中文字段排序
- mysql中文字段排序
- mysql中文字段排序