mysql语句解决查询乱码_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创建数据库 】

代码如下

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)

其中后面的

代码如下

TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

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

代码如下

alter database mysqlcode default character set 'gbk'.

前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。

但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置

“连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作。如果不信

,你现在可以执行下面的sql文试一试:

代码如下

mysql> insert into mysqlcode values(null,'java爱好者');

按回车,结果如下:

ERROR 1406 (22001): Data too long for column 'content' at row 1

设置连接编码

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

代码如下

mysql> SET character_set_client='gbk';

mysql> SET character_set_connection='gbk'

mysql> SET character_set_results='gbk'

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

代码如下

mysql> insert into mysqlcode values(null,'java爱好者');

Query OK, 0 rows affected (0.02 sec)

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

代码如下

mysql> set names 'gbk';

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

代码如下

mysql> select * from mysqlcode;

+----+-----------+

| id | content |

+----+-----------+

| 1   | java爱好着 |

+----+-----------+

1 row in set (0.00 sec)

查询mysql中文记录乱码问题

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

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

代码如下

create table my_table ( name varchar(20) binary not null default'')type=myisam default charset latin1;

附:旧数据升级办法

以原来的字符集为latin1为例,升级成为utf8的字符集。

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

第一步:导出旧数据

代码如下

mysqldump --default-character-set=latin1 -hlocalhost -uroot -Bmy_db --tables old_table > old.sql

第二步:转换编码

代码如下

iconv -t utf-8 -f gb2312 -c old.sql > new.sql

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

第三步:导入

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

代码如下

mysql -hlocalhost -uroot my_db < new.sql

大功告成!!

mysql导入数据乱码解决

出现乱码语句:mysql -hlocalhost -uroot -proot test正确的语句:mysql -hlocalhost -uroot -proot test解决mysql导入导出数据乱码问题

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

代码如下

mysqldump   -uroot  -p  --default-character-set=utf8   dbname tablename  >  bak.sql

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

代码如下

mysql -uroot -p --default-character-set=utf8 dbname < bak.sql

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

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

陈小惜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值