标签:
我在Bluehost上使用Django.我为用户生成的输入创建了一个表单,但是来自此表单的unicode输入无法存储或显示字符.所以我做了SO和谷歌搜索,我应该更改我的数据库的整理和字符集.我运行这个sql
ALTER DATABASE learncon_pywithyou CHARACTER SET utf8 COLLATE utf8_unicode_ci;
从python27 manage.py dbshell,它启动了一个mysql shell,屏幕上显示的是什么
查询正常,1行受影响(0.00秒).
所以我认为问题已经解决了,但事实并非如此.这个sql没有做任何事情,因为我后来在Bluehost提供的phpMyAdmin中找到了它.所有表的所有Varchar字段仍然在lantin1_swedish_ci collate中.
所以假设alter table应该可以工作.我在mysql上运行它
alter table mytable字符集utf8 collate utf8_unicode_ci;
虽然在屏幕上显示查询确定.受影响的4行,它实际上什么也没做,mytable中那些字段的整理根本没有改变.
所以我最终手动更改phpMyAdmin中mytable的字段,这样可行,现在我可以在这个表中插入unicode并且它们也能正确显示,但我有大约20个这样的表,我不想改变它们一个一个人手动.
我们是否有一种简单有效的方法来更改每个字段的Collate以存储和显示正确的unicodes?
解决方法:
除了@StuartLC,
对于更改所有20个表charset和collation使用下面的查询,这里world是数据库名称
SELECT
CONCAT("ALTER TABLE ",TABLE_SCHEMA , ".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci") AS AlterSQL
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "world";
以上将准备您需要运行的所有ALTER查询.
标签:
来源: https://codeday.me/bug/20190529/1175183.html