Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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数据库及其数据从拉丁语转换为UTF-8的详细说明。有太多不同的信息_Mysql_Utf 8_Latin1 - Fatal编程技术网

关于将MYSQL数据库及其数据从拉丁语转换为UTF-8的详细说明。有太多不同的信息

关于将MYSQL数据库及其数据从拉丁语转换为UTF-8的详细说明。有太多不同的信息,mysql,utf-8,latin1,Mysql,Utf 8,Latin1,您能不能提供一种最好的方法,不仅可以转换mysql数据库及其所有表,从latin1_swedish_ci到UTF-8,还可以转换这些表的所有内容?我一直在研究整个堆栈以及其他地方,建议总是不同的 有些人建议只在表和数据库上使用以下命令: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE

您能不能提供一种最好的方法,不仅可以转换mysql数据库及其所有表,从latin1_swedish_ci到UTF-8,还可以转换这些表的所有内容?我一直在研究整个堆栈以及其他地方,建议总是不同的

有些人建议只在表和数据库上使用以下命令:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
其他人说这只是改变了数据库和表,而不是内容

其他人建议转储数据库,创建一个具有正确字符集和排序规则的新表,并将旧数据库导入该表。这实际上也转换了数据吗

mysqldump --skip-opt --set-charset --skip-set-charset
其他人建议在导入之前对转储的数据库运行iconv?这是真的需要,还是导入UTF-8DB进行转换

最后,其他人建议修改数据库,将char/blog表转换为二进制,然后再转换回来

有这么多不同的方法,它已经变得非常混乱

有人能提供一个简明的分步说明,或者给我指一个,关于如何将我的拉丁DBs及其内容转换为UTF-8?如果有一个脚本可以根据数据库自动执行此过程,则更好


提前感谢。

这里是Moodle社区的一个例子:

(向下滚动至“已解释”。)

作者首先做一个SQL转储,这是一个大的SQL文件。然后他复制文件。之后,他用
sed
对复制的文件进行编码更正。最后,他将复制并更正的SQL转储文件导入到数据库中


我可以推荐这一点,因为通过这一个步骤,很容易检查它们是否做对了。如果出了问题,就回到最后一步,换一种方式试试

使用MySQL工作台来处理这个问题

  • 运行迁移向导以生成将创建数据库架构的脚本
  • 编辑该脚本以更改排序规则和字符集(notepad++search replace适用于此)以及shema名称,这样就不会覆盖现有数据库
  • 运行脚本以新名称创建副本
  • 使用迁移向导将数据批量传输到新架构。它将为您处理所有转换,并确保您的数据仍然良好

  • 这是两个不同的问题,经常被混为一谈:

  • 更改表或列的内部数据存储方式规范
  • 将乱码mojibake数据转换为其预期字符
  • MySQL中的每个文本列都有一个关联的charset属性,该属性指定存储在该列中的编码文本应作为内部文本存储。这只会真正影响此列中可以存储哪些字符以及数据存储的效率。例如,如果您正在存储大量日文文本,
    sjis
    作为编码可能比
    utf8
    高效得多,并为您节省一点磁盘空间

    列编码不会以任何方式影响数据库输入和输出的编码数据。这是一个单独的设置,即连接编码,每次连接到数据库时都会为每个客户机建立连接编码。MySQL将根据需要在连接编码和列/表字符集之间动态转换数据。您可以使用
    utf8
    连接连接到数据库,将其发送到
    sjis
    列的日文文本,MySQL将动态地从
    utf8
    转换到
    sjis
    (并在退出时反向转换)

    现在,如果你把连接编码搞砸了(这种情况经常发生),并且你插入的文本编码与指定的连接编码不同(例如,你的连接编码是
    latin1
    ,但你实际上发送了UTF-8编码的数据),那么你在数据库中存储垃圾,你需要恢复它。如果这是你的问题,请参阅

    但是,如果您的所有数据都是桃色的,并且从现在开始您只需要告诉MySQL以不同的编码存储数据,那么您只需要:

    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
    MySQL将当前数据从其当前字符集转换为新的字符集,并将未来的数据存储在新的字符集中。就这些