Home > Database > Mysql Tutorial > 分享mysql中文乱码的解决办法

分享mysql中文乱码的解决办法

WBOY
Release: 2016-06-01 09:57:16
Original
1006 people have browsed it

修改mysql配置解决乱码

首先:

用show variables like “%colla%”;show varables like “%char%”;这两条命令查看数据库与服务端的字符集设置

如果查看出来都是gbk2312,或 gbk,那么就只能支持简体中文,繁体和一些特殊符号是不能插入的,我们只有修改字符集为UTF-8,

修改方法如下:

用记事本或UitraEdit打开mysql数据库安装目录下的my.ini文件打开, 然后Ctrl+F搜索default-character-set,将后面的字符集修改为UTF8,注意要修改两个地方,一个事客户端的,一个是服务端的。

然后保存,重启mysql服务、、进去继续用show variables like “%colla%”;show varables like “%char%”;着两条语句查询一下字符集

数据表和连接部分的编码设置

设置数据库和数据表编码

要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码。如果没有指明,将是默认的latin1。
用得最多的应该是这3种字符集 gb2312,gbk,utf8。
如何去指定数据库和数据表的字符集呢?下面也gbk为例:
【在MySQL Command Line Client创建数据库 】

<code class="language-sql">mysql> CREATE TABLE `mysqlcode` (
  -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  -> `content` VARCHAR( 255 ) NOT NULL
  -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
  Query OK, 0 rows affected, 1 warning (0.03 sec)</code>
Copy after login

其中后面的 TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

当然也可以通过如下指令修改数据库数据表的字符集:

<code class="language-sql">alter database mysqlcode default character set 'gbk'.</code>
Copy after login

前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。
但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置“连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作。如果不信,你现在可以执行下面的sql文试一试:

<code class="language-sql">mysql> insert into mysqlcode values(null,'代码分享');</code>
Copy after login

设置连接编码

设置了服务器、数据库和数据表部分的编码,必须设置连接编码。连接编码设置如下:

<code class="language-sql">mysql> SET character_set_client='gbk';
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'</code>
Copy after login

设置好连接编码,下面便可以成功插入中文了:

<code class="language-sql">mysql> insert into mysqlcode values(null,'java爱好者');
Query OK, 0 rows affected (0.02 sec)</code>
Copy after login

其实,上面设置连接编码的三条命令可以简化为一条:

<code class="language-sql">mysql> set names 'gbk';</code>
Copy after login

设置好了连接编码后,在select查询时,也能正确显示中文:

<code class="language-sql">mysql> select * from mysqlcode;
+----+-----------+
| id | content |
+----+-----------+
| 1   | java爱好着 |
+----+-----------+
1 row in set (0.00 sec)</code>
Copy after login

 

查询mysql中文记录乱码问题

我们这里以gb2312编码乱码为实例来介绍

如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束,例如:

<code class="language-sql">create table my_table ( name varchar(20) binary not null default'')type=myisam default charset latin1;</code>
Copy after login

附:旧数据升级办法
以原来的字符集为latin1为例,升级成为utf8的字符集。

原来的表:old_table (default charset=latin1),新表:new_table(defaultcharset=utf8)。

第一步:导出旧数据

<code class="language-sql">mysqldump --default-character-set=latin1 -hlocalhost -uroot -Bmy_db --tables old_table > old.sql</code>
Copy after login

第二步:转换编码

<code class="language-sql">iconv -t utf-8 -f gb2312 -c old.sql > new.sql</code>
Copy after login

在这里,假定原来的数据默认是gb2312编码。

第三步:导入

修改old.sql,增加一条sql语句: "SET NAMES utf8;",保存。

<code class="language-sql">mysql -hlocalhost -uroot my_db </code>
Copy after login

大功告成!!

mysql导入数据乱码解决 

出现乱码语句:mysql -hlocalhost -uroot -proot test

正确的语句:mysql -hlocalhost -uroot -proot test

解决mysql导入导出数据乱码问题

首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8,例如下面的代码:

<code class="language-sql">mysqldump   -uroot  -p  --default-character-set=utf8   dbname tablename  >  bak.sql</code>
Copy after login

那么导入数据的时候也要使用--default-character-set=utf8:

<code>mysql -uroot -p --default-character-set=utf8 dbname </code>
Copy after login

这样统一编码就解决了mysql数据迁移中的乱码问题了

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template