Mysql
数据库乱码与编码问题筛查
1 mysql编码
用下面的命令可以查看mysql当前的各种默认编码:
showvariables like 'character\_set\_%'; 可以看到目前mysql的默认编码; showvariables like 'collation_%';
my.cnf中设置对应的编码:
[client] default-character-set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
2 数据库编码:
CREATE DATABASE IF NOT EXISTS my_db DEFAULT CHARSET utf8COLLATE utf8_general_ci;
3. 数据表编码
/*!40101SET @saved_cs_client =@@character_set_client */; /*!40101SET character_set_client = utf8 */; CREATETABLE `access` ( `id` int(8) unsigned NOT NULL AUTO_INCREMENT, `role_id` smallint(6) unsigned NOT NULL, `node_id` smallint(6) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `nodeId` (`node_id`) )ENGINE=MyISAM AUTO_INCREMENT=364 DEFAULTCHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */;
4. 转存的时候
有时候需要转存数据库,但是好好的数据库转到新库就乱码了,你可能需要:
#mysqldump --default-character-set utf8 -u root -pmypass mydb> mydb.sql
5. 查询的时候
有时候,虽然mysql、数据库、数据表以及导出的数据sql文件编码都没问题,但是query出来仍然出现乱码,可能是因为,在query的时候也需要设置编码,函数名称大同小异,在php+mysql中是:
mysql_query('set names utf8');
以上。