PHP的MYSQLI get_charset返回错误的字符集

时间:2017-04-26 16:40:42

标签: php mysql mysqli collation

我做:

$conn->real_connect($host,$user,$pass,$someUTF8Schema);

然后我打印出来的内容:

$conn->get_charset()

是:

charset =“latin1” collat​​ion =“latin1_swedish_ci”

即使我的架构和数据库中的所有表都是utf8。

为了证明这一点,我做了:

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = $someUTF8Schema;
->
# DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
'utf8', 'utf8_unicode_ci'

为什么PHP MySQLi返回错误的排序规则?谢谢!

1 个答案:

答案 0 :(得分:0)

有许多事情需要协调。

  1. 您在PHP中操作的字符是什么编码?
  2. 您是否通过连接呼叫或set_charsetSET NAMES告诉MySQL编码?
  3. 您可以通过`get_charset()。
  4. 获取
  5. 但是数据库/表/列不必与 -
  6. 相同
  7. 创建数据库时,可以为该数据库中的 new 表建立默认字符集。
  8. 创建表时,可以通过在该表中为 columns 显式指定charset来覆盖该默认值。
  9. 指定列时,可以通过显式指定该列的字符集来覆盖该默认值。
  10. 根据步骤2解释插入的INSERTing字节,然后转换为列的字符集(#7)。
  11. 同样,当SELECTing时,如有必要,会重新转换字符(#7->#2)。
  12. 注意,我没有提到COLLATION,只提到CHARACTER SET。它们是不同的动物。 COLLATION指的是如何比较给定CHARACTER SET中的字符。

    请参阅Trouble with utf8 characters; what I see is not what I stored的最佳实践部分。