這兩天在學習webpy,把webpy的一個blog例子扒下來學習一下,默認建立的table當存入中文的時候是亂碼,研究了一下這個問題。mysql
1,建立table的時候就使用utf8編碼web
舉個例子:sql
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;
在每次建立表的時候都在最後加上 ubuntu
character set = utf8服務器
就能夠很好的支持中文。post
2,修改已經有的table的編碼學習
當使用默認編碼建立了一個table的時候,是不能支持中文的,這時候使用以下語句對table_name進行修改:測試
alter table table_name convert to character set utf8;
此後再往這個table插入中文的時候,就能夠正常存儲和讀取了,但不知道爲何以前的亂碼仍是不能糾正,只能新插入的數據沒有問題。google
[注意] 我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;