【问题标题】:Mysql php character set settingMysql php字符集设置
【发布时间】:2012-10-17 13:56:30
【问题描述】:

起初我们使用 mysql 的默认字符集 latin1_swedish_ci。然后我们遇到了其他语言(如俄语等)的问题。所以我们现在将表格转换为排序规则,将字段转换为 utf8_unicode_ci。如果我们坚持使用 utf8_unicode_ci 以支持所有可能的语言,还是选择其他类似 utf8_bin 的东西,我们需要在这里确认一下?

对于我们使用mysqli的php文件的下一个问题,我们已经设置了这个。

if (!mysqli_set_charset($link, "utf8")) {
    echo("Error loading character set utf8: ". mysqli_error($link));
  } 
  else {
    echo("Current character set: ". mysqli_character_set_name($link));
  }

然后对于我们只使用mysql的地方,我们如下所示

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'"); 

现在我们发现这个问题很乏味,我们害怕我们可能会错过。是否可以像我们为数据库连接设置的配置文件一样设置此字符设置?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    不要将 mysql_* 与 mysqli_* 函数混用。您需要保持一致!您先使用 mysqli_,然后再使用 mysql_。那是行不通的!

    这就是我的做法:

    mysqli_set_charset($Handle, 'utf8'); // <- add this too
    mysqli_query($Handle, "SET NAMES 'utf8';");
    mysqli_query($Handle, "SET CHARACTER SET 'utf8';");
    mysqli_query($Handle, "SET COLLATION_CONNECTION = 'utf8_unicode_ci';");
    // might be a bit redundant but it's safe :) ... I think :)
    

    然后确保为它提供正确的 UTF8。

    【讨论】:

    • @claudarian 不,我没有在需要事务的地方混合它们,然后我使用 mysqli 并且我只选择然后我 mysql。所以我保持一致只是我不知道我在做什么事情正确。那么用哪个utf8 utf8_unicode_ci就足以表示所有的字符呢?
    • 是我将其设置为全局值的任何方式,例如在配置文件中?谢谢。
    • @user132638 不知道,不在乎。我喜欢自己设置东西,而不是依赖可能存在或不存在的配置。考虑只使用 mysqli_。移动到新界面很容易。 mysql_* 已停产......所以如果你刚刚开始,请避开它​​。据我了解,您同时使用两个连接......这不是很有效。
    • @claudarian 太好了,我想别无选择,然后我必须手动获取并添加我的查询运行或正确使用的每个位置。谢谢你。在我的情况下 $ 句柄是数据库链接吗?
    • @user132638 不!建立连接后只添加一次。此更改是会话持久的。您使用 mysqli_connect(...) (或 mysqli(...)) 连接并仅在建立连接后调用一次字符集说明符。并且您已准备好在该连接上完成的所有下一个查询。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2012-09-01
    • 1970-01-01
    • 2021-10-24
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多