mysql 是从4.0 升级上来的, 直接使用了latin1_swedish_ci 存储汉字,没想到带来了好多麻烦。
首先是查询的问题
mysql> select * from my_city where city=’温州’;
+—-+——+
| id | city |
+—-+——+
| 2 | 温州 |
| 3 | 梧州 |
+—-+——+
2 rows in set (0.00 sec)
当然, 如果在city上建了唯一索引, 就会倒大霉…
然后是排序的问题
mysql> select * from my_city order by city asc;
+—-+——+
| id | city |
+—-+——+
| 6 | 上海 |
| 2 | 温州 |
| 3 | 梧州 |
| 5 | 西安 |
| 7 | 重庆 |
| 4 | 安徽 |
| 8 | 北京 |
+—-+——+
7 rows in set (0.00 sec)
这个顺序看起来更让人郁闷…
临时解决方案:
ALTER TABLE `my_city` CHANGE `city` `city` VARCHAR( 25 ) CHARACTER SET latin1 COLLATE latin1_bin NULL DEFAULT NULL
修改字段的collate 为 latin1_bin
然后再来看
查询正常
mysql> select * from my_city where city=’温州’;
+—-+——+
| id | city |
+—-+——+
| 2 | 温州 |
+—-+——+
1 row in set (0.00 sec)
排序部分正常
mysql> select * from my_city order by city asc;
+—-+——+
| id | city |
+—-+——+
| 4 | 安徽 |
| 8 | 北京 |
| 6 | 上海 |
| 2 | 温州 |
| 3 | 梧州 |
| 5 | 西安 |
| 7 | 重庆 |
+—-+——+
7 rows in set (0.00 sec)
要彻底解决还是要整个转换为gbk , 当然utf-8 会更好一点.