Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否有办法将所有现有表数据转换为UTF8排序规则?_Mysql - Fatal编程技术网

Mysql 是否有办法将所有现有表数据转换为UTF8排序规则?

Mysql 是否有办法将所有现有表数据转换为UTF8排序规则?,mysql,Mysql,我正在协助数据库从MySQL 4升级到MySQL 5.5。我的客户机的应用服务器也已从JDK5升级到JDK7。然而,应用程序运行时在执行数据库操作时会抛出大量异常 我发现升级后的数据库在表排序和/或表列排序中混合使用了Latin1-generic、Latin1-Swedish和UTF8-generic,因此大多数联接查询都失败了 有数百个表和数千个表字段,手动转换它们将非常困难 是否有更方便的方法将所有数据表和所有列转换为相同的排序规则 多谢各位 Edit:SQLException消息示例显示联

我正在协助数据库从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;