讓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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM