导出时重定向,(右箭头“>”符号),是操作系统来做存储,使用操作系统的编码,比如windows powershell就会处理为UTF16,导入时会有一些问题
数据本身编码,可能是乱码,可以用python中的byte/str(或者python2中的unicode格式)转换,使用encode/decode方法即可,比如input.decode('utf8').encode('latin1').decode('gbk').encode('utf8')
还要注意库、表、字段的字符集设置,比如CHARSET/CHARACTER SET等,要与刚刚转换好的一致
这里注意,同一服务的不同库可能有不同设置,同一库中可能不同表有不同设置,同一表中可能不同字段有不同设置
不论原始数据、过程中的数据,编码是怎样的,只要保证最终转换后的字符编码、编码命令配置是一致的,sql文件就准备好了
导入的过程,如果登录msyql命令行客户端后使用source命令执行sql文件中的命令,则编码可能受系统终端、mysql终端等影响。使用navicat、jetbrains系列工具,或者使用python发送sql命令,可以避免发送命令时的编码问题
最后,显示数据,mysql命令行客户端在终端显示正常,不能证明编码正确,因为mysql命令行终端,也受到系统终端shell的影响,比如可能是UTF8 via latin1显示出来的,就是经过latin1编码的UTF8内容
使用sequel pro/navicat/python等工具作为客户端,可以设置数据在显示时的编码方式,检查并确认编码正确