• linux下修改Mysql的字符编码方式


    1. 首先使用mysql命令进入mysql命令界面,使用如下命令查看编码设置 :

    mysql> status
    --------------
    mysql  Ver 14.14 Distrib 5.1.67, for debian-linux-gnu (i486) using readline 6.1

    Connection id:  40
    Current database: mytest
    Current user:  root@localhost
    SSL:   Not in use
    Current pager:  stdout
    Using outfile:  ''
    Using delimiter: ;
    Server version:  5.1.67-0ubuntu0.10.04.1-log (Ubuntu)
    Protocol version: 10
    Connection:  Localhost via UNIX socket
    Server characterset: latin1
    Db     characterset: latin1
    Client characterset: latin1
    Conn.  characterset: latin1
    UNIX socket:  /var/run/mysqld/mysqld.sock
    Uptime:   20 min 43 sec

    Threads: 13  Questions: 164  Slow queries: 0  Opens: 131  Flush tables: 1  Open tables: 31  Queries per second avg: 0.131


    2. 上面的latin1就是产生乱码的罪魁祸首,因为入库 和 数据显示的时候使用的UTF-8,因此,只需要将上面命令查看到的编码修改即可。

    3. 修改/etc/my.cnf 中的设置, 
         在[client]节点下添加  
           default-character-set=utf8 
        在[mysqld]节点下添加 
           character-set-server=utf8 
          collation-server=utf8_general_ci 
    Linux下设置Mysql编码 - heavengate - Heavengate的博客

       保存即可(如果你是使用vi来操作,则保存时会报错,因为这个文件是只读属性,或者以root的身份运行,可以使用 wq! 强制保存退出)。 

    4. 重启mysql即可。 
    5.此时查看编码设置:
    Linux下设置Mysql编码 - heavengate - Heavengate的博客

     也可以通过mysql> show variables like 'character%'; //查询当前mysql数据库的所有属性的字符编码:

    Linux下设置Mysql编码 - heavengate - Heavengate的博客
    6. 这里面本没有什么高深之处, 重要一点是要注意版本, 网上有不少的修改帖子,都是要在[mysqld]下加上 default-character-set=utf8  ,实际上5.0(>)版本以上是不支持的,如果你这样修改, 你的mysql将不能启动, 报一个错,信息是"上次退出的时候没有保存PID (大概是这个错误提示) 

    关于乱码: 
        这么多年来,碰到的乱码问题可多了, 最开始学习jsp ,使用tomcat、到各种数据库, 或者从xml等解析数据,   我的总结是: 乱码不可怕, 只要把握一条原则即可, “这个东西用什么编码的, 用什么解码的,用什么编码的, 用什么解码”,只要保证这个过程中的编码、解码过程一致就OK, 例如,你用GBK编码了一个str, 然后用UTF解码肯定会出错,但是你如果用这个UTF8的str解码后的byte用GBK再次编码就么有问题了。 

        要清楚本质: 不论什么东东, 在底层表示的时候都是 byte[], 而在真正编码的时候,就可能是用一个字节、两个字节 ==来表示某种语言的一个字符, 例如一个asc字符用一个byte表示即可,但是汉字却是使用两个字节。   解码时,一个汉字用两个byte表示,如果你在编码的时候用这两个byte来解析成两个字符,则结果不是原字符-----这就是乱码原理。 

         最懒的方式: 保证你的项目 从UI-server-DB 这个过程使用一致的编码格式即可,前提是你需要知道各个过程哪里发生了解码、哪里发生了编码。
    参考:http://ehuangmy.iteye.com/blog/1591141

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

    附加:

    mysql编码设置[2]:

    mysql命令行修改字符编码

    1、修改数据库字符编码

    mysql> alter database mydb character set utf8 ;

    2、创建数据库时,指定数据库的字符编码

    mysql> create database mydb character set utf8 ;

    3、查看mysql数据库的字符编码

    mysql> show variables like 'character%'; //查询当前mysql数据库的所有属性的字符编码

    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    4、修改mysql数据库的字符编码

    mysql> set character_set_client=utf8 ;

    mysql> set character_set_connection=utf8 ;

    mysql> set character_set_database=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> 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/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    参考:http://www.cnblogs.com/candle806/archive/2013/01/14/2859721.html

  • 相关阅读:
    【转】fastjson-1.2.47-RCE
    某安全设备未授权访问+任意文件下载0day
    关于伴侣
    【转】Why BIOS loads MBR into 0x7C00 in x86 ?
    【生活】北京旅游攻略
    利用Python读取图片exif敏感信息
    A MacFUSE-Based Process File System for Mac OS X
    linux-强制断开远程tcp连接
    Navicat use HTTP Tunnel
    python mac下使用多进程报错解决办法
  • 原文地址:https://www.cnblogs.com/hanzhuzi/p/4162384.html
Copyright © 2020-2023  润新知