【问题标题】:Converting mysql database to support multiple languages转换mysql数据库以支持多种语言
【发布时间】:2011-07-17 14:41:03
【问题描述】:
我目前有一个数据库,大部分表和字段都存储为 latin1_swedish_ci。
我的问题是:
- 我应该对表及其字段使用 utf8_unicode_ci 吗?
- 表和字段的排序规则有什么区别?
- 我可以将所有字段/表批量更改为 utf8_unicode_ci 吗? (如果这是正确的排序规则)
- 字段/表格中是否会发生任何数据丢失?
我想使用 utf8 的原因是因为我需要在数据库中存储中文和/或俄文字符。
【问题讨论】:
标签:
mysql
internationalization
【解决方案1】:
- 我会去的。在使用多种语言时,几乎没有理由不使用 utf8。
- 如果未在各个列定义中指定列字符集和排序规则,则表字符集和排序规则将用作列定义的默认值。
- 如果您在字段上没有单独的排序规则/字符集,您可以编写一个简单的脚本来循环遍历所有表并发出
ALTER TABLE tablename CONVERT TO CHARSET utf8;。如果您的字段具有自定义字符集/排序规则,则必须发出 MODIFY COLUMN 声明。您可以在转换后轻松识别查询information_schema.columns 表的用户。
- 是的,如果数据无法以 utf8 表示(鉴于您当前的排序规则,这不太可能),数据可能会中断。此外,如果您将 utf8 文本存储在实际上不是 utf8 的列中,则转换这些字段会导致类似双 utf8 编码的结果,这很不方便清理。如果您知道某列被错误地用于故事 utf8,您可以将其转换为 bin & 然后再转换为 utf8 以防止转换/双重编码。