mysql数据乱码及解决方案

本文介绍了解决MySQL数据库中字符集乱码的方法,包括通过设置字符集、导出并重新导入数据来更改现有数据的字符集。适用于需要调整已存在数据库字符集的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.插入数据乱码时可以设置插入时的字符集
1.1. set names 字符集;
1.2 mysql -uusername -ppassword –default-character-set=字符集 testdb

+--------------------------+------------------------------+
| character_set_client     | utf8    //客户端字符集                                               |
| character_set_connection | utf8    //连接字符集                                               |
| character_set_database   | latin1  //数据库字符集                                               |
| character_set_filesystem | binary  //文件系统字符集                                               |
| character_set_results    | utf8     //返回字符集                                              |
| character_set_server     | latin1   //服务端字符集                                              |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/mariadb-5.5.52-linux-x86_64/share/charsets/ |
+--------------------------+------------------------------+
       默认情况下,character_set_client,character_set_connection,character_set_results跟操作系统字符集一致。

对于生产环境已有数据的数据库,使用

alter database character set * 
alter table tablename character set * 
这两个命令都没有更新已有记录的字符集,而是对新创建的表或记录生效。已有记录的字符集的调整,必须先将数据导出,经过修改字符集后重新导入才可完成。

修改过程:

    1.导出表结构
         mysqldump -uroot -p123456 --default-character-set=latin1 -d dbname>alltable.sql 表示以GBK 字符集进行连接 -d只导出表结构
         2.编辑导出的alltable.sql文件,将latin1改成GBK
         3.确保数据库不再更新,导出数据
          mysqldump -uroot -p123456 --quick --no-create-info --extended-insert  --default-character-set=latin1 dbname >alldata.sql
          参数说明:
             --quit:用于转储大的表,强制mysqldump 从服务器一次一行检索数据而不是检索所有行,并输出到cache内存。
             --no-create-info:不创建create table 语句
             --extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,I/O也更小,导入数据时非常快。
             --default-character-set=latin1 按照原有的字符集导出数据,这样导出的数据中,所有中文都是可见的,不会乱码
        4.打开alldata.sql,将set names latin1改为set names GBK
        5.建库。
          create database dbname default charset gbk;
        6.创建表,执行alltable.sql
          mysql -uroot -p123456 dbname <alltable.sql
        7.导入数据
          mysql -uroot -p123456 dbname <alldata.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值