我想将3.23.49 MySQL数据库传输到5.0.51 MySQL数据库.现在我已经导出了SQL文件,我已经准备好导入了.我查看了sql文件,记事本向我显示文件是用ANSI编码的.我查看了值,其中一些是ANSI,其中一些是UTF-8.什么是最好的方法?
>我应该在记事本中更改编码吗?
>我应该使用ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;?
>我应该使用iconv吗?
>我是否必须查看每个表并进行必要的更改?
> Whate是导入的设置? MYSQL323兼容模式和编码latin1?
>如果php脚本使用其他编码,我是否必须注意某些事情?
谢谢你的提示!
解决方法:
我四年前将MySQL 4.0数据库(也没有字符编码的概念)转换为MySQL 5.0,所以BTDT.
但首先,没有“ANSI”字符编码;这是a misconception and a misnomer that has caught on from the early versions of Windows(有ANSI escape sequences,但它们与字符编码无关).你肯定会看到Windows-1252编码的文本.您应该将该文本转换为UTF-8,因为您最有可能保持所有使用的字符完整(UTF-8是Unicode编码,Unicode包含可以使用Windows-125x编码的所有字符,但在不同的代码点).
我使用了iconv和recode程序(在MySQL服务器上运行的Debian GNU / Linux系统上)将MySQL导出的Windows-1252编码文本(由phpMyAdmin创建)转换为UTF-8.使用适合您的任何程序或程序组合.
至于你的问题:
>你可以试试,但它可能不起作用.特别是,您可能无法使用记事本或其他文本编辑器打开大型数据库转储.
>取决于. ALTER TABLE … CONVERT TO …不仅仅是转换编码.
>见上文.
>是的.您应该将每个表的字符编码和要导入数据的每个文本字段设置为utf8(使用任何utf8_ … collation最适合您的目的或数据). ALTER TABLE … CONVERT TO …就是这样. (但见2.)
>我不认为MYSQL323在这里很重要,因为你的导出只包含CREATE,INSERT和ALTER语句.但请先检查手册(phpMyAdmin中设置旁边的“?”图标). latin1 means “Windows-1252” in MySQL 5.0,这样可能会有效,您必须跳过导入的手动转换.
>我不这么认为; PHP is not yet Unicode-aware.重要的是PHP脚本如何处理数据.通常,使用该数据生成的文本资源的Content-Type头字段应该以;字符集= UTF-8.
另外请注意,您不应再使用MySQL 5.0.x.当前的稳定版本是MySQL 5.5.18.“根据MySQL支持生命周期策略,active support for MySQL 5.0 ended on December 31, 2009.MySQL 5.0现在处于扩展支持阶段.” MySQL 5.0.0 Alpha已于2003年12月22日发布,扩展支持预计将在2011-12-31(今年)之后的整整8年结束.
标签:mysql,encoding,migration,transfer
来源: https://codeday.me/bug/20190610/1209179.html