我们正在将包含 UTF-8 编码数据的 .sql 脚本中的数据导入 MySQL 数据库:
mysql ... database_name < script.sql
稍后,这些数据将再次以 UTF-8 格式显示在我们的 Web 应用程序(连接到该数据库)的页面上。但是在这个过程中的某个地方出了点问题,因为非 ascii 字符显示不正确。
我们第一次尝试解决它是将 mysql 列编码更改为 UTF-8(如此处所述):
alter table wp_posts change post_content post_content LONGBLOB;`
alter table wp_posts change post_content post_content LONGTEXT CHARACTER SET utf8;
但这没有帮助。
最后,我们通过从带有附加命令行标志的 .sql 脚本导入数据解决了这个问题,我相信这会迫使 mysql 客户端将来自 .sql 脚本的数据视为 UTF-8。
mysql ... --default-character-set=utf8 database_name < script.sql
它有所帮助,但后来我们意识到这次我们忘记将列编码更改为 utf8 -latin1
即使 utf-8 编码的数据正在流经数据库(从 sql 脚本到应用程序),它也被设置为。
因此,如果即使数据库字符集设置不正确,从数据库获取的数据也能正确显示,那我为什么还要费心设置正确的数据库编码呢?
特别想知道:
- 数据库的哪些部分依赖于列编码设置?这个设置什么时候有真正的意义?
- 在什么情况下进行列编码的隐式转换?
- 将列转换为二进制格式然后转换为目标编码的技巧如何工作(参见:上面的 sql 代码片段)?我还是不明白。
希望有人帮我清理一下...