zoukankan      html  css  js  c++  java
  • MySQL的字符集

    MySQL字符集介绍


    修改mysql的默认字符集是通过修改它的配置文件来实现的。一般分两种情况:
      【Windows平台】
      windows下的mysql配置文件是my.ini,一般在c:windowsmy.ini或者c:winntmy.ini可以直接在这个文件里面加上
      default-character-set=gbk #或gb2312,big5,utf8
      然后重新启动mysql
      service mysql restart  或  /etc/init.d/mysql restart
      或用其他方法重新启动,就生效了。
      【Unix平台】
      linux下的mysql配置文件是my.cnf,一般是/etc/my.cnf,如果找不到可以用find命令找一下:
      find / -iname my.cnf
      在这个文件里面加上
      default-character-set=gbk #或gb2312,big5,utf8
      然后重新启动mysql
      net stop mysql

    查看字符集:

    1.show character set;或show char set;
     查看数据库支持的所有字符集
     2.status;或s;
     查看当前状态里面包括当然的字符集设置
     3.show variables like 'char%';
     查看系统字符集设置,包括所有的字符集设置
     4.show table status from sqlstudy like '%countries%';
     查看sqlstudy数据库中表的字符集设置
     5.show full columns from countries;
     查看表列的字符集设置,关键是在同一个表中,每列可以设置成不同的字符集

    修改字符集:

     1.修改服务器级
     a. 临时更改:
     mysql>SET GLOBAL character_set_server=utf8;
     b. 永久更改:
     修改my.ini文件
     [mysqld]
     default-character-set=utf8
     2.修改数据库级
     a. 临时更改:
     mysql>SET GLOBAL character_set_database=utf8;
     b. 永久更改:
     改了服务器级就可以了
     3.修改表级
     mysql>ALTER TABLE table_name DEFAULT CHARSET utf8;
     更改了后永久生效
     4.修改列级
     修改示例:
     mysql>alter
    table `products` change `products_model` `products_model` varchar( 20 )
     character set utf8 collate utf8_general_ci null default null;
     更改了后永久生效
     5.更改连接字符集
     a. 临时更改:
     mysql> set names utf8;
     b. 永久更改:
     修改my.ini文件
     在[client]中增加:
     default-character-set=utf8
    执行SQL语句时信息的路径是这样的
    信息输入路径:client →connection →server;  
    信息输出路径:server→ connection  → results.

     给出my.ini (windows) 或者是my.cnf(linux)  的文件内容。

    [client]
    port = 3306
    socket = /var/run/mysqld/mysqld.sock
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
    init_connect='SET NAMES utf8'


    MySQL的字符集支持(Character Set Support)有两个方面:

    字符集(Character set)和排序方式(Collation)。

     

    对于字符集的支持细化到四个层次:

    服务器(server), 数据库(database), 数据表(table), 连接(connection)。

     

    MySQL默认字符集

      MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

     

    但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?   

     

    (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;

     

    (2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

     

    (3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;

     

    (4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;

     

    (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;

     

    (6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

     

    (7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

     

    简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

     

    查看默认字符集 (默认情况下,mysql的字符集是latin1(ISO_8859_1)

     

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

         

    SHOW VARIABLES LIKE 'character%';

     

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

    | 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       | D:"mysql-5.0.37"share"charsets" |

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

     

    SHOW VARIABLES LIKE 'collation_%';

     

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

    | Variable_name        | Value               |

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

    | collation_connection | utf8_general_ci |

    | collation_database   | utf8_general_ci |

    | collation_server     | utf8_general_ci |

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

     

    修改默认字符集

     

    (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值

    default-character-set = utf8

           character_set_server = utf8

       修改完后,重启mysql的服务,service mysql restart

       使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8

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

    | 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       | D:"mysql-5.0.37"share"charsets" |

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

     

       (2) 还有一种修改字符集的方法,就是使用mysql的命令

        SET character_set_client = utf8 ;

          SET character_set_connection = utf8 ;

     

    Liunx下修改MySQL字符集 

     

     

    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

     

    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.

    5.查看字符集设置

    mysql> show variables like 'collation_%';

    +----------------------+-----------------+
    | Variable_name        | Value           |
    +----------------------+-----------------+
    | collation_connection | utf8_general_ci |
    | collation_database   | utf8_general_ci |
    | collation_server     | utf8_general_ci |
    +----------------------+-----------------+
    3 rows in set (0.02 sec)

     

    mysql> show variables like 'character_set_%';
    +--------------------------+----------------------------+
    | 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/ |
    +--------------------------+----------------------------+
    8 rows in set (0.02 sec)


    其他的一些设置方法:
     

    修改数据库的字符集
    mysql>use mydb

    mysql>alter database mydb character set utf-8;

    创建数据库指定数据库的字符集
    mysql>create database mydb character set utf-8;

     

    通过配置文件修改:

    修改/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命令行修改:

    mysql> set character_set_client=utf8;

    mysql> set character_set_connection=utf8;

    mysql> set character_set_database=utf8;

    mysql> set character_set_results=utf8;

    mysql> set character_set_server=utf8;

    mysql> set character_set_system=utf8;

    mysql> set collation_connection=utf8;

    mysql> set collation_database=utf8;

    mysql> set collation_server=utf8;

  • 相关阅读:
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    FFmpeg解码H264及swscale缩放详解
    linux中cat more less head tail 命令区别
    C语言字符串操作总结大全(超详细)
    如何使用eclipse进行嵌入式Linux的开发
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5571052.html
Copyright © 2011-2022 走看看