文档详情

MYSQL使用UTF8中文乱码终极解决办法MYSQL使用UTF8中文乱码终极解决办法.pdf

发布:2018-04-23约5.07千字共6页下载文档
文本预览下载声明
MYSQL使用UTF8中文乱码终极解决办法 作者:刘明灵 liumingling@ 2009.8 MYSQL乱码的问题主要有几个环节决定,一个是前端网页;二是字符传输;三是连接 MYSQL;四是MYSQL的存贮方式。 MYSQL的缺省字符集为latin1;如果不做任何处理,则存贮方式为latin;此时虽 然在PHP程序中设置set names utf8,可以正确存取中文;但其实utf8的字符 按照latin1来存贮,占用的字节数差不多翻倍。这样的方式,本质上是按照乱码存 放,读取的时候再还原,是不太可取的。 我们要做的是实现前端UTF-8,传输UTF-8,接口UTF8,存贮UTF8。 1、前端问题:网页和PHP程序存贮为UTF-8格式;网页中指定编码格式: meta http-equiv=Content-Type content=text/html; charset=UTF-8 / 2、传输问题:apache的配置 vim /etc/apache2/conf.d/charset AddDefaultCharset UTF-8 3、MYSQL的连接和存贮问题:修改MYSQL配置 vim /etc/mysql/f [client] default-character-set = utf8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci skip-character-set-client-handshake [mysql] default-character-set = utf8 注1:MySQL官方建议 [mysqld] 的部份应该要使用 character-set-server 与 collation-server 等选项, 而不是使用 default-character-set,因为此选项已经是 deprecated。 注2:skip-character-set-client-handshake是忽略客户端的字符集,使用 服务器的设置;这样就使得接口也是UTF8;很多人建议在PHP程序中, 在连接数据库时设置mysql_query(set names utf8);或者在f中配 置init-connect=SET NAMES utf8 (仅对非超级用户有效); 其实这里配置skip-character-set-client-handshake是最简洁有效的,客户 端可以不做任何处理。 注3:[client]配置客户端部分,用于服务器本地维护;[mysql]配置MYSQL启动 条件。 重启mysql /etc/init.d/mysql restart 进入MYSQL,查看配置是否正确: mysql show variables like character_set_%; +++ | Variable_name | Value | +++ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +++ 8 rows in set (0.00 sec) mysql show variables like collation_%; +++ | Variable_name | Value
显示全部
相似文档