如何將整個MySQL數據庫字符集轉換爲UTF-8並將排序規則轉換爲UTF-8? html
若是您是命令行外殼程序之一,則能夠很是快速地執行此操做。 只需填寫「 dbname」:D mysql
DB="dbname" ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;' mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \ | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) \ | mysql "$DB"
DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"
您能夠建立sql以使用如下命令更新全部表: sql
SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci; ", "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ") AS alter_sql FROM information_schema.TABLES WHERE TABLE_SCHEMA = your_database_name;
捕獲輸出並運行它。 數據庫
阿諾德·丹尼爾斯的上述回答更爲優雅。 vim
若是您沒法使錶轉換,或者表始終設置爲某些非utf8字符集,可是您想要utf8,則最好的選擇是清除它並從新開始並顯式指定: ide
create database database_name character set utf8;
惟一對我有用的解決方案: http : //docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8 編碼
mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql cp dump.sql dump-fixed.sql vim dump-fixed.sql :%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/ :%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/ :wq mysql -uusername -ppassword < dump-fixed.sql
若是數據不是相同的字符集,則能夠考慮從http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html中獲取此代碼段 spa
若是該列具備非二進制數據類型(CHAR,VARCHAR,TEXT),則其內容應以列字符集而不是其餘字符集編碼。 若是內容以不一樣的字符集編碼,則能夠先將該列轉換爲使用二進制數據類型,而後再轉換爲具備所需字符集的非二進制列。 命令行
這是一個例子: code
ALTER TABLE t1 CHANGE c1 c1 BLOB; ALTER TABLE t1 CHANGE c1 c1 VARCHAR(100) CHARACTER SET utf8;
確保選擇正確的排序規則,不然可能會遇到惟一的鍵衝突。 例如,在某些整理中,Éleanore和Eleanore可能被認爲是相同的。
在旁邊:
我遇到的狀況是,即便某些字符以UTF-8格式存儲在數據庫中,電子郵件中的某些字符也會「中斷」。 若是要使用utf8數據發送電子郵件,則可能還但願將電子郵件轉換爲以UTF8格式發送。
在PHPMailer中,只需更新如下行: public $CharSet = 'utf-8';