mysql默认字符集在php调用时不同
和其他许多人一样,我在mysql字符集方面遇到了一些问题。和其他许多人一样,我希望所有内容都是UTF-8,但mysql安装了latin-1,无论我如何尝试/google/Experience使用mysql配置,客户端设置中仍然潜伏着latin-1 好的,这是设置。我有一个(非root)mysql用户“usr”,密码为“pwd”。每当我通过终端(mysql-uusr-p)访问mysql,然后友好地询问他的字符集时,他就会告诉我他爱上了utf8(他应该是这样的): 但是,如果我使用PHP访问mysql(通过同一个用户): 然后打印$result1,$result 2,它神奇地回到拉丁语-1:mysql默认字符集在php调用时不同,mysql,set,character,Mysql,Set,Character,和其他许多人一样,我在mysql字符集方面遇到了一些问题。和其他许多人一样,我希望所有内容都是UTF-8,但mysql安装了latin-1,无论我如何尝试/google/Experience使用mysql配置,客户端设置中仍然潜伏着latin-1 好的,这是设置。我有一个(非root)mysql用户“usr”,密码为“pwd”。每当我通过终端(mysql-uusr-p)访问mysql,然后友好地询问他的字符集时,他就会告诉我他爱上了utf8(他应该是这样的): 但是,如果我使用PHP访问mysq
character_set_client => latin1
character_set_connection => utf8
character_set_database => utf8
character_set_filesystem => binary
character_set_results => latin1
character_set_server => utf8
character_set_system => utf8
character_sets_dir => /usr/share/mysql/charsets/
collation_connection => utf8_unicode_ci
collation_database => utf8_general_ci
collation_server => utf8_unicode_ci
无论我是通过浏览器(作为php cgi)还是通过终端(作为php cli)调用php,这种情况都会发生
解决方法是在每个连接处手动设置字符集:
mysql_set_charset('utf8',$mysql_link);
这很有效。但我觉得应该有办法通过mysql配置来实现这一点
作为参考,Mysql配置(my.cfg)包括:
[client]
default_character_set = utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
PHP配置(PHP.ini)包括
谢谢转发!=)
另外,我知道mysql函数已经被弃用,应该用mysqli函数替换。但希望这与这个问题没有任何关系=)如果你和大多数人一样,你可以使用root帐户访问MySQL。这个小片段可能是你的烟枪 如前所述,应用程序仍然需要在连接后使用集合名称或等效名称配置连接。您可能会尝试使用--init_connect=“SET NAMES'utf8'”选项启动服务器,以便为每个连接的客户端自动执行SET NAMES。但是,这将产生不一致的结果,因为不会为具有超级权限的用户执行init_connect值
也许可以打开查询日志记录,看看PHP是否在调用集合名latin1
mysql_set_charset('utf8',$mysql_link);
[client]
default_character_set = utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
default_charset = "utf-8"