zoukankan      html  css  js  c++  java
  • 如何修改MySQL字符集

     

      首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容
    及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级
    指定。

      对于使用者来说,一般推荐使用utf8编码来存储数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还
    和用户的程序文件的编码方式、用户程序和MySQL数据库的连接方式都有关系。

    首先,MySQL有默认的字符集,这个是安装的时候确定的,在编译MySQL的时候可以通过DEFAULT_CHARSET=
    utf8和DEFAULT_COLLATION=utf8_general_ci这两个参数(MySQL5.5版本,5.1版本用--with-charset=
    utf8 --with-collation=utf8_general_ci)来指定默认的字符集为utf8,这也是最一劳永逸的办法,这样指定后,
    客户端连接到数据库的编码方式也默认是utf8了,应用程序不需要任何处理。

      但是遗憾的是,很多人编译安装MySQL的时候没有指定这两个参数,大多数人更是通过二进制程序的方式安装,那
    么这时候MySQL的默认字符集是latin1。而这时候我们仍然可以指定MySQL的默认字符集,通过my.cnf文件增加
    两个参数:
    1.在[mysqld]下添加
      default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)
    2.在[client]下添加
      default-character-set=utf8
    这样我们建数据库建表的时候就不用特别指定utf8的字符集了。配置文件里的这种写法解决了数据存储和比较的问题
    ,但是对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set
     names命令。事实上,set names utf8命令对应的是服务器端以下几个命令:
      SET character_set_client = utf8;
      SET character_set_results = utf8;
      SET character_set_connection = utf8;
      但这三个参数是不能写在配置文件my.cnf里的。只能通过set命令来动态修改。我们需要的是在配置文件里写好一劳
    永逸的办法。那么这时候,是否有在服务端解决问题的办法呢,可行的思路是在init_connect里设置。这个命令在每
    个普通用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行设置连接字符集:
    在[mysqld]下添加:
      init_connect = 'SET NAMES utf8'
    总结:
    1、首选在编译安装MySQL的时候指定两个参数使用utf8编码。
    2、次选在配置文件my.cnf或my.ini设定两个参数,同时设置init_connect参数。
    3、第三在配置文件my.cnf或my.ini设定两个参数,同时客户端的连接指定set names命令。
    4、在配置文件my.cnf里的client和server处加入default-character-set参数方便管理。

    复制代码
     1 -------客户端----
     2 [client]
     3 no-beep
     4 
     5 # pipe
     6 # socket=mysql
     7 port=3306
     8 
     9 [mysql]
    10 
    11 default-character-set=gb2312
    12 
    13 -----服务器----
    14 
    15 # The default character set that will be used when a new schema or table is
    16 # created and no character set is defined
    17 character-set-server=gb2312
    复制代码

    1.service mysqld stop,停用mysql。

    2.cp /etc/my.cnf /etc/my.cnf.bak,修改前做备份,这是个好习惯。

    修改my.cnf或my.ini(只有修改配置文件,并重启服务器,才能永久生效)
    vi /etc/my.cnf
    在[client]下添加,client为控制客户端的,没试过,没有的可以不需要加。
    default-character-set=utf8
    在[mysqld]下添加,mysqld为控制服务器端的,改过了,OK。
    default-character-set=utf8

    3.service mysqld restart,重启。

    4.show variables like '%char%';查看。

     

    以下为网络转载,比较全。

    //////////////////////////////////////////

    查看mysql字符集MySQL 乱码的根源是的 MySQL 字符

    ubuntu 10.04 mySql 启动,停止,重启

    启动:sudo /etc/init.d/mysql start 
    停止:sudo /etc/init.d/mysql stop 
    重启:sudo /etc/init.d/mysql restart

      注意:从windows下拷贝过来的文件在linux下不能直接加入数据库,因为字符集不一样,这样打开即使显示是中文也不能在数据库中显示,要把文件拷贝进linux的另一个文件中转换字符才可以。

      MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令。包括查看 MySQL 数据库服务器字符集、查看 MySQL 数据库字符集,以及数据表和字段的字符集、当前安装的 MySQL 所支持的字符集等。

    一、查看 MySQL 数据库服务器和数据库字符集。

     mysql> show variables like '%char%';

    二、查看 MySQL 数据表(table) 的字符集。

     mysql> show table status from sqlstudy_db like '%countries%';

    三、查看 MySQL 数据列(column)的字符集。

     mysql> show full columns from countries;

    四、查看当前安装的 MySQL 所支持的字符集。

      mysql> show charset;

      mysql> show char set;

    以上查看 MySQL 字符集命令,适用于 Windows & Linux。 
     

    1.查找MySQL的cnf文件的位置
      find / -iname '*.cnf' -print

      /usr/share/mysql/my-innodb-heavy-4G.cnf 
      /usr/share/mysql/my-large.cnf
      /usr/share/mysql/my-small.cnf
      /usr/share/mysql/my-medium.cnf
      /usr/share/mysql/my-huge.cnf
      /usr/share/texmf/web2c/texmf.cnf
      /usr/share/texmf/web2c/mktex.cnf
      /usr/share/texmf/web2c/fmtutil.cnf
      /usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf
      /usr/share/texmf/tex/jadetex/jadefmtutil.cnf
      /usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf
      /usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf
      /usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf
      /usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf
      /usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf

    2. 拷贝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一个到/etc下,命名为my.cnf 
      cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

    3. 修改my.cnf 或my.ini(5.6版本)
    vi /etc/my.cnf
    在[client]下添加
      default-character-set=utf8
    在[mysqld]下添加
      default-character-set=utf8

    4.重新启动MySQL 
      [root@bogon ~]# /etc/rc.d/init.d/mysql restart
      Shutting down MySQL                                         [ 确定 ]
      Starting MySQL.                                             [ 确定 ]
      [root@bogon ~]# mysql -u root -p
      Enter password:
      Welcome to the MySQL monitor. Commands end with ; or g.
      Your MySQL connection id is 1
      Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
      Type 'help;' or 'h' for help. Type 'c' to clear the buffer.


    其他的一些设置方法: 
    如 通过配置文件修改: 
    修改/var/lib/mysql/mydb/db.opt
      default-character-set=latin1
      default-collation=latin1_swedish_ci

      default-character-set=utf8
      default-collation=utf8_general_ci
    重起MySQL:
      [root@bogon ~]# /etc/rc.d/init.d/mysql restart

    通过MySQL命令行修改: 
    复制代码
    1 mysql> set character_set_client=utf8;
    2 mysql> set character_set_connection=utf8;
    3 mysql> set character_set_database=utf8;
    4 mysql> set character_set_results=utf8;
    5 mysql> set character_set_server=utf8;
    6 mysql> set character_set_system=utf8;
    7 mysql> set collation_connection=utf8;
    8 mysql> set collation_database=utf8;
    9 mysql> set collation_server=utf8;
    复制代码
    1 show variables like 'collation_%';
    2 show variables like 'character_set_%';
    1 ---1.修改数据库字符集
    2 alter database mini default character set = gb2312; 
    3 ----2.创建数据库设置字符集
    4 create database mydb character set gb2312;
    1 alter table pub_logs default character set = gb2312; 
    2 alter table pub_logs convert to character set gb2312;
    1 SELECT a.TABLE_TYPE,CONCAT('alter TABLE ',A.TABLE_NAME,' default character set = gb2312;')  FROM INFORMATION_SCHEMA.TABLES A
    2 WHERE A.TABLE_SCHEMA='MINI'
    3 AND a.TABLE_TYPE='BASE TABLE'
    4 ;
    复制代码
    1 SELECT CONCAT(CONCAT(CONCAT('alter TABLE ',c.TABLE_NAME,' modify'),CONCAT(' ',C.COLUMN_NAME,' '),C.COLUMN_TYPE),' ',' character set gb2312 COLLATE gb2312_chinese_ci;') AS CLOU
    2 FROM 
    3 INFORMATION_SCHEMA.COLUMNS C,INFORMATION_SCHEMA.TABLES A
    4 WHERE c.TABLE_SCHEMA='MINI'
    5   AND A.TABLE_NAME=c.TABLE_NAME
    6   AND A.TABLE_TYPE='BASE TABLE'
    7   AND c.DATA_TYPE='varchar'
    8   ;
    复制代码
     
     
  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/SofuBlue/p/8051392.html
Copyright © 2011-2022 走看看