Mysql 是否有办法将所有现有表数据转换为UTF8排序规则?
我正在协助数据库从MySQL 4升级到MySQL 5.5。我的客户机的应用服务器也已从JDK5升级到JDK7。然而,应用程序运行时在执行数据库操作时会抛出大量异常 我发现升级后的数据库在表排序和/或表列排序中混合使用了Latin1-generic、Latin1-Swedish和UTF8-generic,因此大多数联接查询都失败了 有数百个表和数千个表字段,手动转换它们将非常困难 是否有更方便的方法将所有数据表和所有列转换为相同的排序规则 多谢各位 Edit:SQLException消息示例显示联接查询失败:Mysql 是否有办法将所有现有表数据转换为UTF8排序规则?,mysql,Mysql,我正在协助数据库从MySQL 4升级到MySQL 5.5。我的客户机的应用服务器也已从JDK5升级到JDK7。然而,应用程序运行时在执行数据库操作时会抛出大量异常 我发现升级后的数据库在表排序和/或表列排序中混合使用了Latin1-generic、Latin1-Swedish和UTF8-generic,因此大多数联接查询都失败了 有数百个表和数千个表字段,手动转换它们将非常困难 是否有更方便的方法将所有数据表和所有列转换为相同的排序规则 多谢各位 Edit:SQLException消息示例显示联
“操作“=”的排序规则(latin1_general_ci,隐式)和(utf8_general_ci,可强制)的非法混合”字符集的混合不应导致查询失败,因为MySQL应根据需要在字符集之间转换 但是,如以下文件所述: 要将表格默认字符集和所有字符列(,)更改为新字符集,请使用以下语句:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
如果指定转换为字符集二进制
,则和列将转换为相应的二进制字符串类型(,)。这意味着这些列将不再具有字符集,后续的转换为操作将不适用于它们
如果charset\u name
为默认值
,则使用数据库字符集
警告
CONVERT TO
操作在字符集之间转换列值。如果在一个字符集中有一列(如latin1
),则这不是您想要的,但存储的值实际上使用了一些其他不兼容的字符集(如utf8
)。在这种情况下,您必须对每个此类列执行以下操作:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
这种方法之所以有效,是因为在转换到列或从列转换时没有转换
是否确定字符集是联接查询失败的原因?-你能举个这样的例子吗,因为这不应该发生。
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;