我在Bluehost上使用Django。我爲用戶生成的輸入創建了一個表單,但是來自此表單的unicode輸入未能存儲或顯示字符。所以我做了一個SO和谷歌搜索,我應該改變我的數據庫的整理和字符集。我從python27 manage.py dbshell
,它發起了一個mysql外殼運行該SQLALTER DATABASE更改COLLATE不起作用
ALTER DATABASE learncon_pywithyou CHARACTER SET utf8 COLLATE utf8_unicode_ci;
,是什麼在屏幕上顯示是 Query OK, 1 row affected (0.00 sec)
。
所以我假設問題解決了,但實際上並不是這樣。這個sql沒有做任何事情,因爲我後來在Bluehost提供的phpMyAdmin中找到它。所有表的所有Varchar字段仍然在lantin1_swedish_ci
collate中。
因此,假設alter table
應該工作。我在MySQL alter table mytable character set utf8 collate utf8_unicode_ci;
運行此,雖然在屏幕上它顯示Query OK. 4 rows affected
,它實際上什麼也沒做都不好,mytable
這些領域的整理並沒有改變。
因此,我最後手動更改phpMyAdmin中的字段爲mytable
,這個工程,現在我能夠在這個表中插入unicode並且它們也能正確顯示,但是我有大約20個這樣的表,我不想要手動更改它們。
我們是否有一個簡單而有效的方法來更改每個字段的Collate以存儲和顯示正確的unicodes?
感謝這個經驗豐富的答案,現在我相信那些DBMS在設計中確實考慮了自動化,即使沒有太多關鍵字。這是我想要的,它應該爲我節省很多時間。並感謝@StuartLC的有用基礎,「轉換爲」。 – TonyTony
如下所示:如果表中沒有任何內容被轉換,字符集保持不變 - 在這種情況下,您必須使用不帶「convert to」的查詢。 MariaDB 10.0.27。 – korkman