欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Mysql数据库乱码与编码问题筛查

程序员文章站 2022-04-28 19:40:58
...

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 最近接连遇到数据库编码问题,让你的系统本来像个美丽的姑娘却忽然发现她不识字一样难受,其实很多时候是编码的问题,而mysql(特别地)设计编码的地方很多,在这里做一个筛查: 1 mysql编码 用下面

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  最近接连遇到数据库编码问题,让你的系统本来像个美丽的姑娘却忽然发现她不识字一样难受,其实很多时候是编码的问题,而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');

Mysql数据库乱码与编码问题筛查