如何將整個MySQL數據庫字符集和排序規則轉換爲UTF-8?

如何將整個MySQL數據庫字符集轉換爲UTF-8並將排序規則轉換爲UTF-8? html


#1樓

在命令行外殼上

若是您是命令行外殼程序之一,則能夠很是快速地執行此操做。 只需填寫「 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"

#2樓

您能夠建立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


#3樓

若是您沒法使錶轉換,或者表始終設置爲某些非utf8字符集,可是您想要utf8,則最好的選擇是清除它並從新開始並顯式指定: ide

create database database_name character set utf8;

#4樓

惟一對我有用的解決方案: 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

#5樓

若是數據不是相同的字符集,則能夠考慮從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';

相關文章
相關標籤/搜索