Ton*_*ony 6 mysql django collate
我在 Bluehost 上使用 Django。我为用户生成的输入创建了一个表单,但是来自该表单的 unicode 输入无法存储或显示字符。所以我做了一个 SO 和谷歌搜索,我应该更改我的数据库的整理和字符集。我运行这个 sql
ALTER DATABASE learncon_pywithyou CHARACTER SET utf8 COLLATE utf8_unicode_ci;
from python27 manage.py dbshell,它启动了一个 mysql shell,屏幕上显示的是
Query OK, 1 row affected (0.00 sec).
所以我假设问题已解决,但实际上并非如此。这个sql没有做任何事情,因为我后来在Bluehost提供的phpMyAdmin中找到了它。所有表的所有 Varchar 字段仍在lantin1_swedish_ci整理中。
所以假设它alter table应该起作用。我在 mysql 上运行这个
alter table mytable character set utf8 collate utf8_unicode_ci;
虽然在屏幕上显示Query OK. 4 rows affected,它实际上也没有做任何事情,这些字段的排序规则mytable根本没有改变。
所以我终于手动更改了 phpMyAdmin 中的字段,mytable这有效,现在我可以使用 unicode 在这个表中插入并且它们显示正确,但是我有大约 20 个这样的表,我不想更改它们一个手动。
我们是否有一种简单有效的方法来更改每个字段的 Collate 以存储和显示正确的 unicode?
在数据库级别更改排序规则为新对象设置默认值 - 不会更改现有排序规则。
同样,在表级别,只有新列(请参阅底部的评论)受此影响:
alter table mytable character set utf8 collate utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
但是,要转换现有列的排序规则,您需要添加convert to:
alter table mytable convert to character set utf8 collate utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
除了@StuartLC之外,为了更改所有 20 个表的字符集和排序规则,请使用下面的查询,这里的 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";
Run Code Online (Sandbox Code Playgroud)
上面将准备ALTER您需要运行的所有查询。
| 归档时间: |
|
| 查看次数: |
4343 次 |
| 最近记录: |