[英]How to set character_set_database and collation_database to utf8 in my.ini?
[英]How to change all the tables in my database to UTF8 character set?
我的數據庫不是 UTF8,我想將所有表都轉換為 UTF8,我該怎么做?
對於單個表,您可以執行以下操作:
ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
對於整個數據庫,我不知道除此之外的其他方法:
http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql
將my_database_name
替換為您的數據庫名稱
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_TYPE != 'VIEW';
這將構建許多可以運行的查詢
更好的是,使用Percona的工具包。 我會在更新到utf8mb4之前審核您的索引,因為密鑰長度存在問題。
SELECT CONCAT('pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8
COLLATE utf8_unicode_ci" t=', TABLE_NAME, ',D=DB_NAME,u=USER_NAME --statistics --execute')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_TYPE != 'VIEW' AND TABLE_COLLATION NOT LIKE '%utf8%';
要更改 phpMyAdmin 中的排序規則,只需按照以下簡單步驟操作:
單擊數據庫后,單擊操作選項卡。 <\/a>
接下來,向下滾動頁面,您將看到排序規則部分。
注意:<\/em>如果您發現使用method 1<\/code>有任何困難,請使用 sql 命令行執行method 2<\/code> 。
使用命令行<\/strong>
打開phpMyAdmin<\/code>並單擊SQL<\/code>選項卡。
# syntax command: ALTER DATABASE your_db_name CHARACTER SET utf8 COLLATE write_collation; # eg: ALTER DATABASE temprory CHARACTER SET utf8 COLLATE utf8_general_ci;<\/code><\/pre>"
就我而言,由於遷移不當,我有幾個模式。
加入其他答案,在這種情況下,我為 charset=latin1 和 collate=latin1_general_ci 為所有不匹配 latin1_general_ci 的模式的所有表做了一個 ALTER 命令生成器
希望能幫助到你。
SELECT CONCAT('ALTER TABLE ', tbl.ts,'.',tbl.tn, ' CHARACTER SET latin1
COLLATE latin1_general_ci, CHANGE COLUMN \`', tbl.tc, '\` \`'
,tbl.tc,'\` ', tbl.tct, ' CHARACTER SET latin1 COLLATE
latin1_general_ci;' ) command FROM (SELECT table_schema ts, table_name
tn, column_name tc, COLUMN_TYPE tct FROM information_schema.columns
WHERE collation_name != 'latin1_general_ci' AND table_schema not in
('information_schema','mysql','performance_schema','sys')) tbl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.