【问题标题】:Collation of mysql import differs when exec from php从 php 执行时,mysql 导入的排序规则不同
【发布时间】:2015-02-23 10:01:21
【问题描述】:

晚上好:

我有一个接收 .sql 文件的 php 脚本,然后该脚本将其导入数据库并对导入的数据进行一些更改。它会调用这个(在移动上传的文件之后):

shell_exec('nohup bash import.sh > import.log 2>&1 &');

在 import.sh 中有这个命令:

mysql -h localhost -u x -px x < file_uploaded.sql

当我从控制台运行 'nohup bash impor.sh > import.log 2>&1 &' 时,它运行良好,但从 php 脚本 (nginx) 运行时,它会导入 .sql,但排序规则不正确,出现奇怪的字符。

【问题讨论】:

    标签: php mysql bash utf-8 collation


    【解决方案1】:

    我假设您的输入文件是用 utf8 编码的。如果不是,请适当更改以下编码。

    只是猜测,但对于 PHP 执行的脚本,可能设置了错误的 LANG,或者它丢失了,默认值不是 utf-8。尝试在 import.sh 中明确设置 LANG

    export LANG="en_US.UTF-8" # or whatever your default locale is
    mysql -h localhost -u x -px x < file_uploaded.sql
    

    另外你可以试试mysql的--default-character-set=选项:

    mysql -h localhost -u x -px x --default-character-set=utf8 < file_uploaded.sql
    

    【讨论】:

    • 该文件具有正确的编码,因为它适用于我的用户。使用 --default-character-set=utf8 对任何用户(包括 www-data)都非常有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2017-06-07
    • 2021-09-10
    • 2023-04-11
    • 2011-11-14
    • 2014-05-20
    相关资源
    最近更新 更多