MySQL顯示中文

wangq17發表於2016-12-05

  http://www.cnblogs.com/livingintruth/p/3433259.html

這兩天在學習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

相關文章