Mysql 汉字+英文字母拼音排序
2017-06-30 10:12
447 查看
–编码转换
select t.real_name from tb_common_user t where t.real_name is not null order by CONVERT(t.real_name USING gbk)
–非汉字
select * from tb_common_user where ascii(real_name)<127
第一种方式:
–编码转换
select t.real_name from tb_common_user t where t.real_name is not null order by CONVERT(t.real_name USING gbk)
缺点:对于纯英文字母无法 按照a b c 排序
第二种方式 :借助中间表 tb_coslers (在原有的基础上 增加了 小写a-z 和 A-Z 的转换) 解决了 第一种出现的问题.
示例:
SELECT t1.id, t1.name, t2.f_PY
FROM t_user t1, tb_coslers t2
WHERE CONV(HEX(LEFT(CONVERT(t1.name USING gbk ), 1)), 16, 10) BETWEEN t2.cBegin AND t2.cEnd
ORDER BY convert(t1.name using gbk) ASC
但是对于如下汉字 会超出限制 导致个别无法精确排序
—十六位进制 超过限制 如: 妞 嗯
select CONV(HEX(LEFT(CONVERT(t1.real_name USING gbk ), 1)), 16, 10) from tb_common_user t1 where real_name = ‘妞’;
备注:最好的方式是在数据库增加一个拼音字段。存字段的时候 把拼音也存进去
tb_coslers表:
–id 1-23 针对汉字
–id 34-59 针对大写英文字母
–id 60-85 针对小写英文字母
DROP TABLE IF EXISTS
CREATE TABLE
PRIMARY KEY (
) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=latin1;
– Records of tb_coslers
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
select t.real_name from tb_common_user t where t.real_name is not null order by CONVERT(t.real_name USING gbk)
–非汉字
select * from tb_common_user where ascii(real_name)<127
第一种方式:
–编码转换
select t.real_name from tb_common_user t where t.real_name is not null order by CONVERT(t.real_name USING gbk)
缺点:对于纯英文字母无法 按照a b c 排序
第二种方式 :借助中间表 tb_coslers (在原有的基础上 增加了 小写a-z 和 A-Z 的转换) 解决了 第一种出现的问题.
示例:
SELECT t1.id, t1.name, t2.f_PY
FROM t_user t1, tb_coslers t2
WHERE CONV(HEX(LEFT(CONVERT(t1.name USING gbk ), 1)), 16, 10) BETWEEN t2.cBegin AND t2.cEnd
ORDER BY convert(t1.name using gbk) ASC
但是对于如下汉字 会超出限制 导致个别无法精确排序
—十六位进制 超过限制 如: 妞 嗯
select CONV(HEX(LEFT(CONVERT(t1.real_name USING gbk ), 1)), 16, 10) from tb_common_user t1 where real_name = ‘妞’;
备注:最好的方式是在数据库增加一个拼音字段。存字段的时候 把拼音也存进去
tb_coslers表:
–id 1-23 针对汉字
–id 34-59 针对大写英文字母
–id 60-85 针对小写英文字母
DROP TABLE IF EXISTS
tb_coslers;
CREATE TABLE
tb_coslers(
idint(11) NOT NULL AUTO_INCREMENT,
f_PYchar(1) CHARACTER SET utf8 DEFAULT NULL,
cBeginsmallint(5) unsigned NOT NULL,
cEndsmallint(5) unsigned NOT NULL,
PRIMARY KEY (
id)
) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=latin1;
– Records of tb_coslers
INSERT INTO
tb_coslersVALUES (‘1’, ‘A’, ‘45217’, ‘45252’);
INSERT INTO
tb_coslersVALUES (‘2’, ‘B’, ‘45253’, ‘45760’);
INSERT INTO
tb_coslersVALUES (‘3’, ‘C’, ‘45761’, ‘46317’);
INSERT INTO
tb_coslersVALUES (‘4’, ‘D’, ‘46318’, ‘46825’);
INSERT INTO
tb_coslersVALUES (‘5’, ‘E’, ‘46826’, ‘47009’);
INSERT INTO
tb_coslersVALUES (‘6’, ‘F’, ‘47010’, ‘47296’);
INSERT INTO
tb_coslersVALUES (‘7’, ‘G’, ‘47297’, ‘47613’);
INSERT INTO
tb_coslersVALUES (‘8’, ‘H’, ‘47614’, ‘48118’);
INSERT INTO
tb_coslersVALUES (‘9’, ‘J’, ‘48119’, ‘49061’);
INSERT INTO
tb_coslersVALUES (‘10’, ‘K’, ‘49062’, ‘49323’);
INSERT INTO
tb_coslersVALUES (‘11’, ‘L’, ‘49324’, ‘49895’);
INSERT INTO
tb_coslersVALUES (‘12’, ‘M’, ‘49896’, ‘50370’);
INSERT INTO
tb_coslersVALUES (‘13’, ‘N’, ‘50371’, ‘50613’);
INSERT INTO
tb_coslersVALUES (‘14’, ‘O’, ‘50614’, ‘50621’);
INSERT INTO
tb_coslersVALUES (‘15’, ‘P’, ‘50622’, ‘50905’);
INSERT INTO
tb_coslersVALUES (‘16’, ‘Q’, ‘50906’, ‘51386’);
INSERT INTO
tb_coslersVALUES (‘17’, ‘R’, ‘51387’, ‘51445’);
INSERT INTO
tb_coslersVALUES (‘18’, ‘S’, ‘51446’, ‘52217’);
INSERT INTO
tb_coslersVALUES (‘19’, ‘T’, ‘52218’, ‘52697’);
INSERT INTO
tb_coslersVALUES (‘20’, ‘W’, ‘52698’, ‘52979’);
INSERT INTO
tb_coslersVALUES (‘21’, ‘X’, ‘52980’, ‘53640’);
INSERT INTO
tb_coslersVALUES (‘22’, ‘Y’, ‘53689’, ‘54480’);
INSERT INTO
tb_coslersVALUES (‘23’, ‘Z’, ‘54481’, ‘55289’);
INSERT INTO
tb_coslersVALUES (‘34’, ‘A’, ‘65’, ‘65’);
INSERT INTO
tb_coslersVALUES (‘35’, ‘B’, ‘66’, ‘66’);
INSERT INTO
tb_coslersVALUES (‘36’, ‘C’, ‘67’, ‘67’);
INSERT INTO
tb_coslersVALUES (‘37’, ‘D’, ‘68’, ‘68’);
INSERT INTO
tb_coslersVALUES (‘38’, ‘E’, ‘69’, ‘69’);
INSERT INTO
tb_coslersVALUES (‘39’, ‘F’, ‘70’, ‘70’);
INSERT INTO
tb_coslersVALUES (‘40’, ‘J’, ‘71’, ‘71’);
INSERT INTO
tb_coslersVALUES (‘41’, ‘H’, ‘72’, ‘72’);
INSERT INTO
tb_coslersVALUES (‘42’, ‘I’, ‘73’, ‘73’);
INSERT INTO
tb_coslersVALUES (‘43’, ‘J’, ‘74’, ‘74’);
INSERT INTO
tb_coslersVALUES (‘44’, ‘K’, ‘75’, ‘75’);
INSERT INTO
tb_coslersVALUES (‘45’, ‘L’, ‘76’, ‘76’);
INSERT INTO
tb_coslersVALUES (‘46’, ‘M’, ‘77’, ‘77’);
INSERT INTO
tb_coslersVALUES (‘47’, ‘N’, ‘78’, ‘78’);
INSERT INTO
tb_coslersVALUES (‘48’, ‘O’, ‘79’, ‘79’);
INSERT INTO
tb_coslersVALUES (‘49’, ‘P’, ‘80’, ‘80’);
INSERT INTO
tb_coslersVALUES (‘50’, ‘Q’, ‘81’, ‘81’);
INSERT INTO
tb_coslersVALUES (‘51’, ‘R’, ‘82’, ‘82’);
INSERT INTO
tb_coslersVALUES (‘52’, ‘S’, ‘83’, ‘83’);
INSERT INTO
tb_coslersVALUES (‘53’, ‘T’, ‘84’, ‘84’);
INSERT INTO
tb_coslersVALUES (‘54’, ‘U’, ‘85’, ‘85’);
INSERT INTO
tb_coslersVALUES (‘55’, ‘V’, ‘86’, ‘86’);
INSERT INTO
tb_coslersVALUES (‘56’, ‘W’, ‘87’, ‘87’);
INSERT INTO
tb_coslersVALUES (‘57’, ‘X’, ‘88’, ‘88’);
INSERT INTO
tb_coslersVALUES (‘58’, ‘Y’, ‘89’, ‘89’);
INSERT INTO
tb_coslersVALUES (‘59’, ‘Z’, ‘90’, ‘90’);
INSERT INTO
tb_coslersVALUES (‘60’, ‘a’, ‘97’, ‘97’);
INSERT INTO
tb_coslersVALUES (‘61’, ‘b’, ‘98’, ‘98’);
INSERT INTO
tb_coslersVALUES (‘62’, ‘c’, ‘99’, ‘99’);
INSERT INTO
tb_coslersVALUES (‘63’, ‘d’, ‘100’, ‘100’);
INSERT INTO
tb_coslersVALUES (‘64’, ‘e’, ‘101’, ‘101’);
INSERT INTO
tb_coslersVALUES (‘65’, ‘f’, ‘102’, ‘102’);
INSERT INTO
tb_coslersVALUES (‘66’, ‘j’, ‘103’, ‘103’);
INSERT INTO
tb_coslersVALUES (‘67’, ‘h’, ‘104’, ‘104’);
INSERT INTO
tb_coslersVALUES (‘68’, ‘i’, ‘105’, ‘105’);
INSERT INTO
tb_coslersVALUES (‘69’, ‘j’, ‘106’, ‘106’);
INSERT INTO
tb_coslersVALUES (‘70’, ‘k’, ‘107’, ‘107’);
INSERT INTO
tb_coslersVALUES (‘71’, ‘l’, ‘108’, ‘108’);
INSERT INTO
tb_coslersVALUES (‘72’, ‘m’, ‘109’, ‘109’);
INSERT INTO
tb_coslersVALUES (‘73’, ‘n’, ‘110’, ‘110’);
INSERT INTO
tb_coslersVALUES (‘74’, ‘o’, ‘111’, ‘111’);
INSERT INTO
tb_coslersVALUES (‘75’, ‘p’, ‘112’, ‘112’);
INSERT INTO
tb_coslersVALUES (‘76’, ‘q’, ‘113’, ‘113’);
INSERT INTO
tb_coslersVALUES (‘77’, ‘r’, ‘114’, ‘114’);
INSERT INTO
tb_coslersVALUES (‘78’, ‘s’, ‘115’, ‘115’);
INSERT INTO
tb_coslersVALUES (‘79’, ‘t’, ‘116’, ‘116’);
INSERT INTO
tb_coslersVALUES (‘80’, ‘u’, ‘117’, ‘117’);
INSERT INTO
tb_coslersVALUES (‘81’, ‘v’, ‘118’, ‘118’);
INSERT INTO
tb_coslersVALUES (‘82’, ‘w’, ‘119’, ‘119’);
INSERT INTO
tb_coslersVALUES (‘83’, ‘x’, ‘120’, ‘120’);
INSERT INTO
tb_coslersVALUES (‘84’, ‘y’, ‘121’, ‘121’);
INSERT INTO
tb_coslersVALUES (‘85’, ‘z’, ‘122’, ‘122’);
相关文章推荐
- MySQL按照汉字拼音首字母排序
- MySQL按照汉字的拼音排序、按照首字母分类
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 用排序规则特点计算汉字笔划和取得拼音首字母
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- mysql 按照 汉字的第一个拼音排序
- PHP将汉字转化成拼音的函数(用于取首字母索引或按字母排序中文)
- 汉字按拼音的第一个字母排序
- MySQL汉字字段按拼音排序
- SQL SERVER利用排序规则特点计算汉字笔划和取得拼音首字母
- mysql 按照 汉字的第一个拼音排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母(转)
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- php 字符串拼音首字母(支持数字,英文,常用汉字)
- Sql Server数据库汉字按字母、笔划、拼音首字母、排序
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- Sql Server数据库汉字按字母、笔划、拼音首字母、排序
- SQL Server根据汉字笔划和取得拼音首字母进行排序
- Sql Server数据库汉字按字母、笔划、拼音首字母、排序