Thursday, May 5, 2011

关于数据库字符集的小小探究

今天在web上测试SQL注入的时候,突然发现不能使用联合查询,数据库返回#1271 - Illegal mix of collations for operation 'UNION'  的错误信息,显然是无法联合两个表,后来在网上搜了半天,发现是因为不同的库的字符集不同导致的,具体内容参见这里:http://hi.baidu.com/xletian/blog/item/4bb56760473cb84cebf8f8cd.html
常用的字符集是
utf8_bin
utf8_general_ciutf8_unicode_ci
utf8_bin 与 utf8_general_ci 可以
utf8_bin 与 
utf8_unicode_ci 可以
utf8_general_ci 与 utf8_unicode_ci 不可以

后来发现查看数据库后的确默认的数据库都是用utf8_general_ci的,比如information_schema库,但是我另外user库是utf8_unicode_ci,显然无法兼容,然后需要调整,具体的方法有好几种,请参见这里:http://hi.baidu.com/loneautumn/blog/item/53c19198637336056f068c03.html
我是使用的phpmyadmin修改的user库的字符集方法,如下
1、登录 PHPMyAdmin,进入 PHPMyAdmin 数据列表页面;
2、点击下图中数据表结构进去;
3、在数据表结构中,字段的字符集修改下,点击下图的位置进入界面;
4、进入界面后,点击整理,下拉选择对应数据表的字符集,点击右侧的“保存”提交。
5、提交后,提示修改成功,并留下一段 SQL 语句。