MySql默认编码所造成的乱码麻烦1.222

1、前言

    MySQL在安装时,最后的一步,会让你选择MySQL服务器及客户端、数据库、连接接口的默认编码。通常可选择

UTF8和GB2312.

    但是,如果你选择了utf8的时候,恰好你要从另一个数据库上迁移一个gb2312编码格式的数据库过来,且那个系统的前端和后端都是gb2312编码的时候,直接新建数据库,导入数据恐怕会产生乱码了。

2、安装MySQL之后修改编码方式

       MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8
      1、需要以root用户身份登陆才可以查看数据库编码方式(root用户身份登陆的命令为:
      >mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为:

   >show variables like 'character%'; 或者 > status
+--------------------------+----------------------------+ 
| Variable_name | Value | 
+--------------------------+----------------------------+ 
| character_set_client | latin1 | 
| character_set_connection | latin1 | 
| character_set_database | latin1 | 
| character_set_filesystem | binary | 
| character_set_results | latin1 | 
| character_set_server | latin1 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8

其中,character_set_client为客户端编码方式;

      character_set_connection为建立连接使用的编码;

      character_set_database数据库的编码;

      character_set_results结果集的编码;

      character_set_server数据库服务器的编码;

只要保证以上四个采用的编码方式一样,就不会出现乱码问题。

另一个查看数据库编码的命令:

>show variables like ‘collation%’;

2linux系统下,修改MySQL数据库默认编码的步骤为:

  • 停止MySQL的运行
    /etc/init.d/mysql start (stop) 为启动和停止服务器

  • MySQL主配置文件为my.cnf,一般目录为/etc/mysql

var/lib/mysql/ 放置的是数据库表文件夹,这里的mysql相当于windowsmysqldate文件夹

  • 当我们需要修改MySQL数据库的默认编码时,需要编辑my.cnf文件进行编码修改,linux下修改mysql的配置文件my.cnf,文件位置默认/etc/my.cnf文件 

    找到客户端配置[client] 在下面添加 
    default-character-set=utf8 默认字符集为utf8 
    在找到[mysqld] 添加 
    default-character-set=utf8 默认字符集为utf8 
    init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行) 

    修改好后,重新启动mysql 即可,重新查询数据库编码可发现编码方式的改变:

>show variables like 'character%'; 
+--------------------------+----------------------------+ 
| 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 | utf8 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

此方法用于标准mysql版本同样有效,对于/etc/my.cnf文件,需要从mysql/support-files的文件夹cp my-large.cnf一份到/etc/my.cnf

3windows系统下可以删除MySQL数据库,并重新安装,在安装过程中可以直接用Mysql Server Instance Config Wizard 进行设置

  4、当MySQL数据库服务器已经有数据不适合删除重装时,可以个别指定数据库的编码方式。MySQL指定编码的方式是非常灵活并多样化的,可以指定表级别的编码,行级别编码,甚至可以指定字段级别的编码。

 以下示例给出创建数据库时指定编码的两种方式:

 1CREATE DATABASE ms_db CHARACTER SET utf8 COLLATE utf8_general_ci

 2create database if not exists netctoss default character set utf8;

   5、如果你采用的是外部接入的方式,可以在连接中确定请求的编码格式如:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8(注意:不要出现任何空格,否则出错)

   6、执行脚本:指定编码格式set names gbk(注意,不是UTF-8)可以修改

执行前:

执行后:

从执行命令前后可知,set names gbk只可以修改character_set_clientcharacter_set_connectioncharacter_set_results的编码方式,并且这种修改是窗口级别的,只针对本窗口有效,打开另外一个窗口修改无效。也可发现数据库底层的编码方式没有改变,插入数据后还是以utf8编码方式保持。

3、修改mysql数据库的默认编码方式

    修改my.ini文件

    加上 default-character-set=gb2312

    设定数据库字符集

    alter database da_name default character set 'charset'

    1)设置数据库编码 /etc/my.cnf(Linux下的文件)
    [mysqld]
    default-character-set=gbk

    ...
    [client]
    default-character-set=gbk

---------------------------------------

   2 )按字符集导出
  $mysqldump -u root -p dbname --default-character-set=gbk > a.sql;

   3)查看SQL文件的编码
   [ root@localhost gethtml]# file a.sql
      a.sql: UTF-8 Unicode ...
   [root@localhost gethtml]# iconv -f utf-8 -t gbk a.sql > a2.sql
   [root@localhost gethtml]# file a2.sql
      a2.sql: Non-ISO extended-ASCII English text 这时已经是gbk的编码了

  3)导入
  查看数据库服务和客户端字符集 
   mysql> status;
   Server characterset:    gbk
   Db     characterset:      gbk
   Client characterset:      latin1
   Conn. characterset:     latin1

   mysql> set names 'gbk';   //这样

   mysql> status;
  Server characterset:   gbk
  Db     characterset:     gbk
  Client characterset:     gbk
  Conn. characterset:    gbk

  这时才能导数据
  mysql> source a.sql;

----------------------------------------------------------------------------------

  单独设置某个数据库:
  alter database testdb character set utf8;

  查看mysql支持的编码:
  show character set;


  查看系统的字符集和排序方式的设定可以通过下面的两条命令:

  mysql> SHOW VARIABLES LIKE ''character_set_%'';

  LINUX 如下:

  1)导出数据
  [root@www.cnscn.org ~]$ mysqldump -u root -p dbname --default-character-set=gbk > base_user.sql;

  2)查看导出的sql文件的编码
  [root@www.cnscn.org ~]$ file base_user.sql 
  base_user.sql: UTF-8 Unicode text, with very long lines

3)转成要用的编码
[root@www.cnscn.org ~]$ iconv -f utf-8 -t gbk base_user.sql >base_user_gbk.sql

4)连接数据库并查看当前库的编码
[root@www.cnscn.org ~]$ mysql -uroot
 mysql> use testdb;

mysql> status;
    Server characterset:    latin1
    Db     characterset:    gbk
    Client characterset:    latin1
    Conn. characterset:    latin1

5)设置成需要的编码
mysql>set names 'gbk';

6)查看现在的编码
mysql> status;
    Server characterset:    latin1
    Db     characterset:    gbk
    Client characterset:    gbk
    Conn. characterset:    gbk

7)导入我们转换成gbk后的文件
mysql> source base_user_gbk.sql;



转载于:https://www.cnblogs.com/tham/p/6827318.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery(js) 增加 删除 修改属性样式、元素内容

引入jquery.js 1.增加或修改样式 $(#id).css(display,none);--根据id设置隐藏 2.$("#id").css({"background-color":"yellow","font-size":"200%"}); 3.增加或修改属性 $(#id).attr(readonly,true);--根据id设置标签属性…

构建自动化面板

上周二,我作为持续讨论(#c9d9)的一部分,参加了一个关于Build Automation主题的在线讨论会,这是一系列有关敏捷,持续交付和DevOps的社区讨论会。 自动化构建流程面临许多挑战,包括第三…

Ioc Autofac心得

对于这个容器注入,个人也不是很熟悉,很多还不懂,只会基本的操作,几天把它记录下来,说不定以后帮助就大了呢,这方面跟安卓差距还是挺大的 下面记录下应用的流程 步骤: 1.添加应用 2.重写工厂&…

开启关闭mysql日志

//mysql开启sql日志 SET GLOBAL log_output TABLE;SET GLOBAL general_log ON; //mysql关闭sql日志 SET GLOBAL log_output TABLE; SET GLOBAL general_log OFF; ---查询mysql运行过的sql SELECT * from mysql.general_log ORDER BY event_time DESC;

深入学习Web Service系列----异步开发模式

概述 在本篇随笔中,通过一些简单的示例来说一下Web Service中的异步调用模式。调用Web Service方法有两种方式,同步调用和异步调用。同步调用是程序继续执行前等候调用的完成,而异步调用在后台继续时,程序也继续执行,不…

java 实现excel样式设置(居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等)

HSSFWorkbook workbook new HSSFWorkbook(); Sheet sheet workbook.createSheet(); sheet.setColumnWidth(0, 30*256);//设置当前sheet页第一列宽度 sheet.setColumnWidth(1, 70*256);//第二列宽度 CellStyle style workbook.createCellStyle(); Font font workbook.cre…

可选依赖项

有时您正在编写的库可能具有可选的依赖项。 例如“如果apache http客户端在类路径上,请使用它;否则,请使用它。 否则–退回到HttpURLConnection”。 为什么要这么做? 由于各种原因–在分发库时,您可能不想强加较大的依…

XML-RPC协议学习

XML-RPC调用包括2部分:客户端client(调用线程)、服务器端server(被调用的线程)。服务端是通过特定的URL获得的,调用过程如下: 1.客户端程序使用XML-RPC客户端发出作业请求,指定方法名…

extjs tree 遍历树节点并设置选中

function initTreeChecked(){//获取根节点 var rootnoe Ext.getCmp("id").getRootNode();; setAllNodes(rootnoe); } //遍历所有节点 function setAllNodes(node){ setNodeChecked(node);//设置选中 var nodesnode.childNodes; for(var i0;i<…

Android开发中调用系统窗口的方法

//直接拨号 Intent callIntent new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678")); startActivity(callIntent); //将电话号码传入拨号程序 Intent dialIntent new Intent(Intent.ACTION_DIAL,Uri.parse("tel:12345678")); startActivity(dial…

navicate导出导入表数据问题

1.导出导入json&#xff0c;如下图&#xff0c;右击表点击导出向导&#xff0c;选择json导出类型&#xff0c;根据提示导出即可。 导入时&#xff0c;右击接收的表&#xff0c;点击导入向导&#xff0c;根据提示即可快速导入&#xff08;注&#xff1a;不同系统之间导出导入易…

spring pojo_使用Spring将POJO公开为JMX MBean

spring pojo这是一个非常不错的教程&#xff0c;介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客&#xff08;很酷的名字&#xff09;实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#…

android地图实时标记

问题描述我在用百度地图给上边做标注的时候&#xff0c;用了一下主要代码&#xff1a;class MyOverlayItem extends ItemizedOverlay<OverlayItem>{ private ArrayList<OverlayItem> mOverlayList new ArrayList<OverlayItem>();private double mLat1 34.0…

tongweb通过控制台简单设置确认相关常用参数

1.环境版本 jdk&#xff0c;tongweb版本确认是否正确 2.检查tongweb的 license是不是永久版本&#xff0c;试用期版本到期会停止服务。 3 JVM运行编码配置-根据系统需要配置 3.1-Dfile.encodingUTF-8 编码根据系统需要配置 4. tongweb运行内存大小--根据系统需要配置 4.1一般 …

编译原理--LL(1)分析法实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试LL&#xff08;1&#xff09;分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL&#xff08;1&#xff09;分析法的理解。 2.实验要求 对下列文法&#xff0c;用LL&#xff08;…

实际中进行GC调整

调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保了解当前的情况和期望的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较 进行更改并…

达梦数据库出现卡慢简单分析点

1.检查是否有锁表 查询锁表&#xff1a;select sess_id,sql_text from v$sessions sess,v$lock lck where sess.trx_idlck.trx_id and lck.blocked1; --查询僵死会话 解锁&#xff1a;根据会话ID&#xff0c;停止会话 sp_close_session(sess_id); 2.根据v$sessions,V$L…

对象的属性

首先要理解的是“实例变量”。 我们在__init__方法中并不是创建了实例变量&#xff0c;我们是添加了一个或者多个属性给实际的对象 在__init__内部 self.x 5和外部 f.x 5没有什么不同。 那么类呢&#xff1f; 1 >>> class Bar(object): 2 pass 3 4 >>>…

hibernate.session.get()方法不能获取表中最新数据解决方式样例

1.A a (A)session.get(A.class, id); sess.createSQLQuery("update A set name where id ").executeUpdate(); A a1 (A)session.get(A.class, id);//a1中获取不到修改后的name值 sess.refresh(a1);//刷新a1对象&#xff0c;取出数据库数据 注&#xff1a;hibern…

hibernate 映射_Hibernate映射集合性能问题

hibernate 映射首先&#xff0c;本文的灵感来自于Burt Beckwith在2011年1月27日于SpringOne 2GX上发表的有关高级GORM –性能&#xff0c;自定义和监视的演讲 。 简而言之&#xff0c; Burt Beckwith讨论了使用映射集合和GORM中的Hibernate 2级缓存的潜在性能问题&#xff0c;以…