ALTER TABLE `test`
為橋東等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務,及橋東網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務為成都做網(wǎng)站、網(wǎng)站制作、橋東網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
DEFAULT CHARACTER SET=utf8;
小的字符集可以向大的修改,大的不能修改到小的字符集,gbk可以修改到utf8,但是utf8修改到gbk會出現(xiàn)亂碼,自己斟酌一
MySQL的默認編碼是Latin1,不支持中文,那么如何修改MySQL的默認編碼呢,下面以UTF-8為例來說明
需要注意的是,要修改的地方非常多,相應的修改方法也很多。下面是一種最簡單最徹底的方法:
一、Windows
1、中止MySQL服務
2、在MySQL的安裝目錄下找到my.ini,如果沒有就把my-medium.ini復制為一個my.ini即可
3、打開my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并關(guān)閉
4、啟動MySQL服務
二、Linux
1、中止MySQL服務(bin/mysqladmin -u root shutdown)
2、在/etc/下找到my.cnf,如果沒有就把MySQL的安裝目錄下的support-files目錄下的my-medium.cnf復制到/etc/下并改名為my.cnf即可
3、打開my.cnf以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并關(guān)閉
4、啟動MySQL服務(bin/mysqld_safe )
關(guān)鍵字:字符集gbkutf8開始表w的字符集設(shè)置成了gbk,但是現(xiàn)在的建的表要求字符集為utf8。于是:alter
table
`w`
default
character
set
utf8;或者alter
table
tbl_name
convert
to
character
set
charset_name;但是發(fā)現(xiàn)其中一個字段content的字符集還是gbk。于是更改mysql數(shù)據(jù)庫表中某個字段的字符集,修改字段的定義:alter
table
`w`
modify
column
`content`
varchar(30)
character
set
utf8
not
null;
首先,MySQL的字符集問題主要是兩個概念,一個是Character Sets,一個是Collations,前者是字符內(nèi)容
及編碼,后者是對前者進行比較操作的一些規(guī)則。這兩個參數(shù)集可以在數(shù)據(jù)庫實例、單個數(shù)據(jù)庫、表、列等四個級
別指定。
對于使用者來說,一般推薦使用utf8編碼來存儲數(shù)據(jù)。而要解決亂碼問題,不單單是MySQL數(shù)據(jù)的存儲問題,還
和用戶的程序文件的編碼方式、用戶程序和MySQL數(shù)據(jù)庫的連接方式都有關(guān)系。
首先,MySQL有默認的字符集,這個是安裝的時候確定的,在編譯MySQL的時候可以通過DEFAULT_CHARSET=
utf8和DEFAULT_COLLATION=utf8_general_ci這兩個參數(shù)(MySQL5.5版本,5.1版本用--with-charset=
utf8 --with-collation=utf8_general_ci)來指定默認的字符集為utf8,這也是最一勞永逸的辦法,這樣指定后,
客戶端連接到數(shù)據(jù)庫的編碼方式也默認是utf8了,應用程序不需要任何處理。
但是遺憾的是,很多人編譯安裝MySQL的時候沒有指定這兩個參數(shù),大多數(shù)人更是通過二進制程序的方式安裝,那
么這時候MySQL的默認字符集是latin1。而這時候我們?nèi)匀豢梢灾付∕ySQL的默認字符集,通過my.cnf文件增加
兩個參數(shù):
1.在[mysqld]下添加
default-character-set=utf8(mysql 5.5 版本添加character-set-server=utf8)
2.在[client]下添加
default-character-set=utf8
這樣我們建數(shù)據(jù)庫建表的時候就不用特別指定utf8的字符集了。配置文件里的這種寫法解決了數(shù)據(jù)存儲和比較的問題
,但是對客戶端的連接是沒有作用的,客戶端這時候一般需要指定utf8方式連接才能避免亂碼。也就是傳說總的set
names命令。事實上,set names utf8命令對應的是服務器端以下幾個命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = xutf8;
但這三個參數(shù)是不能寫在配置文件my.cnf里的。只能通過set命令來動態(tài)修改。我們需要的是在配置文件里寫好一勞
永逸的辦法。那么這時候,是否有在服務端解決問題的辦法呢,可行的思路是在init_connect里設(shè)置。這個命令在每
個普通用戶連接上來的時候都會觸發(fā)執(zhí)行,可以在[mysqld]部分增加以下一行設(shè)置連接字符集:
在[mysqld]下添加:
init_connect = 'SET NAMES utf8'
總結(jié):
1、首選在編譯安裝MySQL的時候指定兩個參數(shù)使用utf8編碼。
2、次選在配置文件my.cnf或my.ini設(shè)定兩個參數(shù),同時設(shè)置init_connect參數(shù)。
3、第三在配置文件my.cnf或my.ini設(shè)定兩個參數(shù),同時客戶端的連接指定set names命令。
4、在配置文件my.cnf里的client和server處加入default-character-set參數(shù)方便管理。
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;警告:上述操作是在字符集中轉(zhuǎn)換列值。如果用戶在字符集(如 gb2312)中有一個列,但存儲的值使用的是其它的一些不兼容的字符集(如 utf8),那么該操作將不會得到用戶期望的結(jié)果。在這種情況下,用戶必須對每一列做如下操作: ALTER TABLE t1 CHANGE c1 c1 BLOB; ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8; 這樣做的原因是:從 BLOB 列轉(zhuǎn)換或轉(zhuǎn)換到 BLOB 列沒有轉(zhuǎn)換發(fā)生。 如果用戶指定以二進制進行 CONVERT TO CHARACTER SET,則 CHAR、VARCHAR 和 TEXT 列將轉(zhuǎn)換為它們對應的二進制字符串類型(BINARY,VARBINARY,BLOB)。這意味著這些列將不再有字符集,隨后的 CONVERT TO 操作也將不會作用到它們上。 如果僅僅改變一個表的缺省字符集,可使用下面的語句: ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name; DEFAULT是可選的。當向一個表里添加一個新的列時,如果沒有指定字符集,則就采用缺省的字符集(例如當ALTER TABLE ... ADD column)。
1) 最簡單的修改方法,就是修改mysql的my.ini文件中的字符集鍵值,
如 default-character-set = utf8
character_set_server = utf8
修改完后,重啟mysql的服務,service mysql restart
(2) 還有一種修改mysql默認字符集的方法,就是使用mysql的命令
SET?NAMES?'utf8';