我做:
$conn->real_connect($host,$user,$pass,$someUTF8Schema);
然后我打印出来的内容:
$conn->get_charset()
是:
charset =“latin1” collation =“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返回错误的排序规则?谢谢!
答案 0 :(得分:0)
有许多事情需要协调。
set_charset
或SET NAMES
告诉MySQL编码?INSERTing
字节,然后转换为列的字符集(#7)。SELECTing
时,如有必要,会重新转换字符(#7->#2)。注意,我没有提到COLLATION
,只提到CHARACTER SET
。它们是不同的动物。 COLLATION
指的是如何比较给定CHARACTER SET
中的字符。
请参阅Trouble with utf8 characters; what I see is not what I stored的最佳实践部分。