解决ubuntu中mysql数据库表名不能为中文,以及插入中文乱码问题

       最近几天的时间都在弄mysql字符问题,最让我头疼的是一开始mysql能支持中文插入,但是不支持中文表名。这让我都抓狂了,现已解决该问题,解决方案如下,希望碰到类似问题的同行能少走弯路。

       首先我要感谢“http://zhidao.baidu.com/question/272450723.html 的  ' 易网库 '   " ;他的一句  “有,那是php的内置函数,取代mysql_query('set names utf8') !“结束了我的痛苦。

    现将一整套的解决方案陈述如下:

 1.  mysql字符集基础知识:

       MySQL 5.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。我们最终的目标是使得这四个层次转化会支持中文的编码,本例中统一使用 utf8  编码。

 2.设置默认的utf8 编码格式

 在终端输入 sudo gedit  /etc/mysq/my.cnf   输入管理员密码后就能打开my.cnf文件,在my.cnf文件的[mysql]下面加上 default-character-set=utf8,然后在终端输入 sudo  /etc/init.d/mysql restart   重启mysql。这样设置的默认编码就生效了。

 3.创建数据库

    在终端输入 mysql -u[username] -p[pwd] 后进入”mysql>“提示符,输入 create database [数据库名] default character set utf8 ;这样就建立了一个utf8编码的数据库了。

   然后输入 user [数据库名] 进入该数据库。

4. 统一各层次的编码格式

  在完成第3步之后,输入 show variables like 'char%' ;将会看到如下输出。在该输出中可以看到除character_set_server 为atin1(这个该不了,至少是用set character_set_server=utf8不能改) 编码之外其他都为utf8,当然filesystem也除外。这说明该数据库没问题了。

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

5.在第4步中建立的数据库中创建表:


 CREATE TABLE whetherjoinclass(
   name varchar(50) NOT NULL, 
  joinedclass varchar(50) NOT NULL,
  whetherauthority varchar(10) NOT NULL, 
  PRIMARY KEY (name)
)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


创建表的时候在末尾要加上DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ,如上所示。创建好表之后,使用show  full columns from whetherjoinclass 来查看表中各属性的编码方式,当看到如下输出时表示编码正确。

+------------------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field            | Type        | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
+------------------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| name             | varchar(50) | utf8_general_ci | NO   | PRI | NULL    |       | select,insert,update,references |         |
| joinedclass      | varchar(50) | utf8_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
| whetherauthority | varchar(10) | utf8_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
+------------------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

这样就算是把基本的设置搞定。

6.在PHP页面中使用

header("Content-type: text/html; charset=utf8");来设置php文件的编码,在php文件中使用mysql数据库的时候在跟数据库建立连接后使用 mysql_query('set names utf8') ;来设置连接的编码方式,这样就能做到中文的任意使用了。

    至此,解决mysql中文乱码的问题就算搞定了,回过头想想,要想没有乱码只需保证前后一致,从头到尾都用同一种编码(前提是该编码方式支持中文)方式。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值