zoukankan      html  css  js  c++  java
  • 让MySQL支持中文

    这两天在学习webpy,把webpy的一个blog例子扒下来学习一下,默认创建的table当存入中文的时候是乱码,研究了一下这个问题。

    1,创建table的时候就使用utf8编码

    举个例子:

    1 create table entries2 (
    2         id     int auto_increment, 
    3         title  text,
    4         content  text,
    5         posted_on  datetime,
    6         primary key (id)   
    7 ) character set = utf8;

    在每次创建表的时候都在最后加上 

      character set = utf8

    就可以很好的支持中文。

    2,修改已经有的table的编码

    当使用默认编码创建了一个table的时候,是不能支持中文的,这时候使用如下语句对table_name进行修改:

    alter table table_name convert to character set utf8;

    此后再往这个table插入中文的时候,就可以正常存储和读取了,但不知道为什么之前的乱码还是不能纠正,只能新插入的数据没有问题。

    [注意]  我google了一下,有些地方说这个命令也行,但是我测试以后并不行  

    alter table table_name charset=utf8;   #这个语句并没有让table_name支持中文

    修改table编码前:

    修改为utf8后并插入一行数据:

    可以看到已支持中文,但之前的3行还是没有改变。

    3,修改table中一个column的编码

    这个我目前还没发现需要在实际中使用到,但是测试了很多次,语句如下:

    alter table entries modify title mediumtext character set utf8;

    其中entries是我的table名,title是我要修改的column字段,mediumtext是title的类型。

    即使是修改table某个字段的编码,也没有做到让之前的乱码变成中文。

    4,如何查看一个database,一个table的编码

      查看database的编码,假如database名字为webpy:

    show create database webpy;

    查看一个table的编码,假如table名为entries2:

    show create table entries2;

     效果如下,其实表中每个字段编码都是utf8,表的default的utf8的,所以没有单独显示每个字段的。

    5,修改mysql的配置文件,让mysql默认编码为utf8

    在我的ubuntu机器上,mysql的配置目录为/etc/mysql

    而我们mysql使用的配置文件为

      /etc/mysql/my.cnf

    我们可以直接加在my.cnf中,当然为了方便移植可复用,也可以如下写在独立的配置文件中。

    在my.cnf最后又include了 conf.d/ 下面所有的*.cnf文件,所以我们就在conf.d/下面加上一个我们自己的配置文件wy_sql.cnf

    添加如下两行

    [mysqld]
    character-set-server=utf8

     再创建表的时候默认编码就是utf8了。

    6,    显示的问题

    上面改了服务器的字符编码,但是如果不改client的,在终端上显示的还是???

    还需要在配置文件中加上

    [client]
    default-character-set=utf8

    通过

    show variables like '%char%'

    可以查看

    和编码  "character" , 有关的变量

     Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | 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/share/mysql/charsets/ |

    7, 直接在mysql中使用 set 设置 变量

    上面我们用show 查看了一些变量的值

    那么可以直接用set来设置,但是这是临时的,下次启动后还是以配置文件的为准

    set  character_set_result = utf8;
  • 相关阅读:
    Web服务技术协议:REST与SOAP
    几种常见的Web服务器
    在浏览器中输入网址后是怎么跳转到指定的服务器的
    forward(请求转发)和redirect(重定向)的区别
    Hook钩子编程
    闭包
    JSP
    临界区与锁
    进程
    LeetCode Search for a Range
  • 原文地址:https://www.cnblogs.com/livingintruth/p/3433259.html
Copyright © 2011-2022 走看看