簡體   English   中英

如何將我數據庫中的所有表更改為 UTF8 字符集?

[英]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 中的排序規則,只需按照以下簡單步驟操作:

方法一<\/h1>
    打開 phpMyAdmin 並選擇您的數據庫。

    <\/li>

  • 單擊數據庫后,單擊操作選項卡。 在此處輸入圖像描述<\/a>

  • 接下來,向下滾動頁面,您將看到排序規則部分。

    • 設置您想要的排序規則並單擊復選框。<\/li>
    • 您的排序規則將被更新。 注意:<\/em>如果您發現使用method 1<\/code>有任何困難,請使用 sql 命令行執行method 2<\/code> 。

      方法二<\/h1>

      使用命令行<\/strong>

      • 打開phpMyAdmin<\/code>並單擊SQL<\/code>選項卡。
      • 接下來,編寫用於更改數據庫排序規則的命令。<\/li><\/ul>
         # 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM