Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 导出latin1数据库并作为utf8导入/转换为utf8_Mysql_Encoding_Utf 8_Iso 8859 1 - Fatal编程技术网

Mysql 导出latin1数据库并作为utf8导入/转换为utf8

Mysql 导出latin1数据库并作为utf8导入/转换为utf8,mysql,encoding,utf-8,iso-8859-1,Mysql,Encoding,Utf 8,Iso 8859 1,我正在一个使用旧数据库的网站上工作,该数据库运行在一台外部MySQL 4.1服务器(服务器a)上。数据库使用拉丁1_瑞典_ci排序规则,表和列也使用拉丁1_瑞典_ci排序规则。有一个新的服务器B运行MySQL 5来替换服务器a。编码应该是utf8\U unicode\U ci 我导出服务器A上的数据库: mysqldump-u root-p--opt--quote name--skip set charset--default character set=latin1 db_a-r db_a.s

我正在一个使用旧数据库的网站上工作,该数据库运行在一台外部MySQL 4.1服务器(服务器a)上。数据库使用拉丁1_瑞典_ci排序规则,表和列也使用拉丁1_瑞典_ci排序规则。有一个新的服务器B运行MySQL 5来替换服务器a。编码应该是utf8\U unicode\U ci

  • 我导出服务器A上的数据库:
    mysqldump-u root-p--opt--quote name--skip set charset--default character set=latin1 db_a-r db_a.sql

  • 通过scp将db_a.sql从服务器a传输到服务器B

  • 用utf-8替换latin1
    sed-e's/CHARSET\=latin1/CHARSET\=utf8\COLLATE\=utf8\u general\u ci/g'db\u a.sql>db\u a2.sql

  • 将文件转换为utf-8
    iconv-f拉丁1-t utf8 db_a2.sql>db_a3.sql

  • 导入db_a3.sql

  • 在phpmyadmin中,所有内容都正确打印。但是新的客户端应用程序在文本列中显示工件


    我尝试了上述步骤的不同变体,但没有成功。包括作为latin1导入和使用mysql convert命令。有人知道我的问题的解决方案吗?

    最好将其加载为latin1,然后进行修复

    然而,这并不简单,因为有多种场景需要考虑。见此: 请特别注意,至少有两种不同的方法来执行

    ALTER
    。如果你选错了,数据会变得更加混乱

    要查看您拥有的内容,请使用以下数据示例:

    SELECT col, HEX(col) FROM ... WHERE ...
    

    如果phpmyadmin打印正确,则似乎是其他客户端的问题。可能编码是硬编码的,或者页面生成为latin1,所以浏览器将UTF-8解释为latin1(因为webserver)要调试编码问题,您应该在web上编写已知字符(和已知值)、之前、之后(仅一个简单查询)的字节码。这有助于理解问题所在。“错误的字符”没有帮助。知道哪些/如何告诉我们常见错误