同理,如果原来是用laint1建立的,只要备份出来的时候:
mysqldump -uroot -p --default-character-set=laint1 --skip-opt test >test.sql
其它步骤相同,这样就转为了GBK,以后也都统一使用相同的编码了。
对于MYSQL不熟的朋友,对于MYSQL不熟的朋友,希望能用这帖让你有所借鉴。
同理,如果原来是用laint1建立的,只要备份出来的时候:
mysqldump -uroot -p --default-character-set=laint1 --skip-opt test >test.sql
其它步骤相同,这样就转为了GBK,以后也都统一使用相同的编码了。
对于MYSQL不熟的朋友,对于MYSQL不熟的朋友,希望能用这帖让你有所借鉴。
继续这个话题。
原来我有一段程序是汉化国外的。在MYSQL4里面,如果用phpmyadmin中看是乱码,但在客户端调用出来是中文。
这说明只要你写入是一种编码,调用是同样的,数据库里是乱码没关系。
后来在升级DZ5时,我把数据库也升到MYSQL5,这时就想把原来laint1转成gbk了。
按上述的方法转完,那个汉化程序里出来的却是乱码。
由于只是涉及数据库时出现乱码,所以肯定是MYSQL的问题。
最后在那段程序的:
mysql_select_db($db_name, $this->link)
前面加上:
$this->query("SET NAMES 'utf8'");
就基本正确了。
只有一个页面出现了:
Server Error: (1406) Data too long for column 'eventDesc' at row 1
的错误,查了一下,还是字符集的问题。
由于是
CREATE TEMPORARY TABLE hlstats_EventHistory
也就是在建立临时数据库时,产生的问题,而且来源又自其它的数据库
insertEvents("TeamBonuses", "
SELECT
'队伍奖励',
.eventTime, CONCAT('其战队受到点 ', bonus, '分奖励,原因 \"', hlstats_Actions.description, '\"'), hlstats_Servers.name, .map FROM LEFT JOIN hlstats_Actions ON .actionId = hlstats_Actions.id LEFT JOIN hlstats_Servers ON hlstats_Servers.serverId = .serverId WHERE .playerId=$player "); 比较复杂,正在继续排查中。。。
在MYSQL中运行的结果是: 队伍奖励 2006-08-30 00:36:47 其战队受到点 2分奖励,原因 "˹Ӑ???챻ϻð" 量子1#正版 de_dust2 看来还是有乱码出现,导致程序错误。
判断出问题出在CONCAT这个MYSQL的函数里,并不是eventDesc的字段不够长。
如果把
insertEvents("TeamBonuses", "
SELECT
'队伍奖励',
.eventTime, CONCAT('其战队受到点 ', bonus, '分奖励,原因 \"', hlstats_Actions.description, '\"'), hlstats_Servers.name, .map FROM LEFT JOIN hlstats_Actions ON .actionId = hlstats_Actions.id LEFT JOIN hlstats_Servers ON hlstats_Servers.serverId = .serverId WHERE .playerId=$player "); 中的CONCAT('其战队受到点 ', bonus, '分奖励,原因 \"', hlstats_Actions.description, '\"'), 替换成 CONCAT('其战队受到点 ', 2, '分奖励,原因 \"', hlstats_Actions.description, '\"'), 结果就为 队伍奖励 2006-08-30 00:36:47 其战队受到点 2分奖励,原因 "所有警察被消灭" 量子1#正版 de_dust2 看来问题出在CONCAT里,这个bonus是个int(11)数字,与中文结合起来就出错了。 这里的bonus是一个int(11)的字段,和中文连接造成中文乱码。 为了解决这个问题,最后是用ASCII(CHAR(bonus))来解决了,实在是晕。。。
在那个汉化的程序里,用的是PERL语言:
my $query = " SELECT playerId FROM hlstats_PlayerUniqueIds WHERE uniqueId='" . &::quoteSQL($uniqueId) . "' AND game='" . $g_servers{$s_addr}->{game} . "' "; my $result = &doQuery($query);
查找:
my $result = &doQuery($query);
在它上面加一条:
my $result = &doQuery("SET NAMES 'utf8'");
这就是PERL的MYSQL调用方式,解决问题。
阅读(2248) | 评论(0) | 转发(0) |