作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [问题] MySQL和PHP(浏览器端)的中文问题
时间Thu Mar 29 02:28:09 2012
※ 引述《ontario (蛰)》之铭言:
: ...
: [我的环境]
: O/S: Win 7 (64-bit)
: MySQL: MySQL Server 5.5.20
: Apache: 2.2.22
: 键入 status 後,得到显示
: Server characterset: latin1
: Db characterset: latin1
: Client characterset: utf8
: Conn. characterset: utf8
: [我的 my.ini 设定]
: # SERVER SECTION
: [mysqld]
: default-character-set=utf8
: 问题1. 一直无法在 status 下看到 Server 和 DB 的 characterset 为 utf8,哪里
: 少设了吗?
内容看起来没有问题,但是有没有可能弄错设定档名? :-)
请利用「开始 | 执行」,输入 services.msc 。查一下 MySQL 服务的设定,看看
mysqld 的 --defaults-file 选项指定的 my.ini (或my.cfg) 在哪里。
: 问题2. 尝试用 SET NAMES utf8; ,可是没有用。
: 问题3. 执行 show create database dbname; --> database 是 utf8
: 执行 show create table tb; --> table 是 utf8
: 执行 insert into tb (name) values ('中文'); 却得到下面的 errmsg
: ERROR 1366 (HY000): Incorrect string value: '\xA4\xA4\xA4\xE5' for column
: 'name' at row 1
: 为什麽不能输入到 tb 里头呢?
这不是您的错,要怪繁体中文系统的「命令提示字元」支援的字码页是 950,
也就是 Big5。我建议您改用例如 SQLyog 这类支援 UniCode 的 Client。
如果一定要在「命令提示字元」直接输入中文,也是有解啦:
mysql -uroot -p
show variables like 'char%';
set character_set_client=big5;
set character_set_results=big5;
set character_set_client=big5 是告诉 MySQL 我们这个 session 会跟他讲
「台湾话」,如此,含有中文的 insert 指令就会成功了(字元会转成 utf8
储存到资料表)。
不过,虽然资料库存的是 utf8 编码,但是繁体中文系统的「命令提示字元」
还是只听得懂「台湾话」,所以,还要告诉 MySQL 将结果集转成 big5 之後
再传出来(set character_set_results=big5)。
可惜的是,即使如此,遇到「许功盖」等着名字元,「命令提示字元」还是会
卡住的,所以,还是建议您使用支援 UniCode 的 Client 软体。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.38.70.99