表song的编码是utf8,执行insert操作前执行了SET NAMES 'utf8'及SET sql_mode=''的操作,sql语句打印出来字段specialname对应的也有内容,是日文(有的日文能保存,有的日文不能保存),但是保存在数据库中以后字段specialname的值是空的,不知道为什么,同样的,字段songname对应的值中也有中文,但是此字段的值即可以正常保存,挺奇怪的,希望高手能帮我解决一下,多谢了!提示:字段specialname的长度是足够长的。2010-04-06 15:42:42 0.90594300 update_data new songid: |337430|
2010-04-06 15:42:42 0.90604500 Sql: INSERT INTO song (sengerid,specialid,songname,lrc,islrc,category_id,specialname,fid,isshow) VALUES ('7474','69363','ルナ・レガーロ ~月からの贈り物~','','0','8','ナ・レガーロ ~月からの贈り物~ (Single)','92294160','1')表song的结构
create table
CREATE TABLE `song` (
`songid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '歌曲id',
`songname` varchar(150) NOT NULL,
`specialname` varchar(100) NOT NULL DEFAULT '',
`lrc` text NOT NULL,
`specialid` mediumint(9) NOT NULL DEFAULT '0',
`sengerid` int(11) NOT NULL DEFAULT '0',
`isshow` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否可以使用',
`islrc` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'ÊÇ·ñÊÇlrc¸è´Ê£¬1±íʾÊÇ£¬0±íʾ²»ÊÇ',
`category_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'ÅÅÐаñ¸èÇúµÄÇú·ç',
`hot` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'play times',
`fid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'audio fingerprinting id',
`week_hot` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'week click count',
PRIMARY KEY (`songid`),
KEY `hot` (`isshow`),
KEY `sengerid` (`sengerid`),
KEY `category_id` (`category_id`),
KEY `week_hot` (`week_hot`)
) ENGINE=MyISAM AUTO_INCREMENT=337454 DEFAULT CHARSET=utf8
2010-04-06 15:42:42 0.90604500 Sql: INSERT INTO song (sengerid,specialid,songname,lrc,islrc,category_id,specialname,fid,isshow) VALUES ('7474','69363','ルナ・レガーロ ~月からの贈り物~','','0','8','ナ・レガーロ ~月からの贈り物~ (Single)','92294160','1')表song的结构
create table
CREATE TABLE `song` (
`songid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '歌曲id',
`songname` varchar(150) NOT NULL,
`specialname` varchar(100) NOT NULL DEFAULT '',
`lrc` text NOT NULL,
`specialid` mediumint(9) NOT NULL DEFAULT '0',
`sengerid` int(11) NOT NULL DEFAULT '0',
`isshow` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否可以使用',
`islrc` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'ÊÇ·ñÊÇlrc¸è´Ê£¬1±íʾÊÇ£¬0±íʾ²»ÊÇ',
`category_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'ÅÅÐаñ¸èÇúµÄÇú·ç',
`hot` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'play times',
`fid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'audio fingerprinting id',
`week_hot` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'week click count',
PRIMARY KEY (`songid`),
KEY `hot` (`isshow`),
KEY `sengerid` (`sengerid`),
KEY `category_id` (`category_id`),
KEY `week_hot` (`week_hot`)
) ENGINE=MyISAM AUTO_INCREMENT=337454 DEFAULT CHARSET=utf8
所有地方的编码均采用的utf8,这个不用怀疑的,主要是有的日语能保存,有的日语不能保存。所有中文保存一点问题都没有。
写进数据库时base_encode 加密一道,
出来时base_decode 一道。
呵呵,这样在数据库里的全是英文了。有时间的话,请按楼上提供的方法
编码问题请看: http://blog.csdn.net/yw1386/archive/2009/10/14/4671845.aspx 希望对你有用!
接分
楼上的哪个方法没用,那些我早就考虑到了,注意,我处理的不是中文,而是中文。用base_encode也比较麻烦,因为我的数据库中已经有几十万数据了,那种方法基本不可行的。
给个网址我看看, 日文也是在utf-8页面输入的吗?
另外,你这个帖子里中文,日文的也太混乱了......标题是中文无法保存,后面又说中文都没问题......
我用的sqlyog看的,别的中文在这个工具里面都能看到的,应该不是这方面的问题。
确认不是此方面的问题,通过web界面也可以看出来值是空的。
自定义一个函数用于删除字符串开始及结束处的空格,此处往 trim函数中传入了第二个参数,其中包括一个半角及全角空格空格,问题就出在这儿,如果调用的时候$str是中文或日文或韩文(非数字及字母),则用ftrim2处理以后有些字符串会出现??的情况,也就是乱码了,此处一定要注意,否则会出现意想不到的结果。比如将某变量用ftrim2处理以后并保存到数据库的某个字段中,大概可能会出现两个问题,1.sql语句报错。2.sql语句不报错,但是值无法保存到数据库中或可以保存到数据库中但是结果是不正确的。function ftrim2($str) {
$str = trim($str, " \t\n\r\0\x0B"); return $str;
}采用第二种方式不会出现这种问题。
function ftrim2($str) {
$str = trim($str);
$str = str_replace(' ', ' ', $str); //将全角空格转换为半角空格
$str = preg_replace('/^\s*|\s*$/is', '', $str); //将开头或结尾的一个或多个半角空格转换为空
return $str;
}