QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3581|回复: 17

请教mysql储存中文问题

[复制链接]
发表于 2005-1-11 06:22:14 | 显示全部楼层 |阅读模式
小弟无法在mysql4.1中储存中文,上网找了很久,很多前辈建议修改php和mysql的默认字符集。

但小弟租用的是国外服务器,恐怕无法修改默认字符集。哪位大哥大姐知道解决办法,小弟遥谢了。
发表于 2005-1-11 09:41:17 | 显示全部楼层
更改了默认字符就失去了支持多国语言的意义

最好的解决方案是使用Unicode(兔兔尚在研究中,sirtoozee cms将使用UTF)

其次可以用charset,具体方法:
在网页模板中加入如下meta标签,其中charset后面的变量需要在PHP脚本中声明
<meta http-equiv="Content-Type" content="text/html; charset=<{$CHARSET}>" />
如果是简体中文就用gb2312
如果是繁体中文就是big5
回复

使用道具 举报

 楼主| 发表于 2005-1-11 19:18:08 | 显示全部楼层
多谢兔老大回复。
兔老大所说的使用
<meta http-equiv="Content-Type" content="text/html; charset=<{$CHARSET}>" />
的方法小弟试过了,但是浏览器无法自动显示中文,必须手动从view--->character encoding中选择简体中文。
所以小弟在代码开始处添加了一句
header("content-Type: text/html; charset=<{$CHARSET}>");
浏览器可以自动显示中文了,但mysql还是无法储存中文信息。
兔老大所说的Unicode,哪里有相关的信息可以查询呢?谢谢
回复

使用道具 举报

发表于 2005-1-11 21:28:11 | 显示全部楼层
你储存时的编码要和实用时候的编码一样。

apache 的编码设置会覆盖 html 的设置,建议使用 header() 输出头信息。
回复

使用道具 举报

 楼主| 发表于 2005-1-11 21:55:15 | 显示全部楼层
储存时的编码与使用时的编码都是gb2312,可是中文存不进mysql
回复

使用道具 举报

发表于 2005-1-12 08:05:23 | 显示全部楼层
你的签名很美

如果你在编程:
你可以说说是在update、insert一组值到一个table么?

如果你是在应用某个PHP程序:
你可以说说使用的是哪个PHP程序么?

兔兔好对症下药
回复

使用道具 举报

 楼主| 发表于 2005-1-12 19:10:41 | 显示全部楼层
[quote:eb569d95a1="涩兔子"]你的签名很美

如果你在编程:
你可以说说是在update、insert一组值到一个table么?

如果你是在应用某个PHP程序:
你可以说说使用的是哪个PHP程序么?

兔兔好对症下药 [/quote]
那个签名是林秀晶,近来看了她的<对不起,我爱你>, 被这个小姑娘电得晕晕的,所以拿她作签名意淫一下

小弟在用php和mysql写一个留言板,但是当用户用中文发言时,留言的内容不会被insert到table里,而是代之以空白,或者乱码。

遥谢兔老大,您给看看有没有什么办法。
回复

使用道具 举报

发表于 2005-1-13 10:10:09 | 显示全部楼层
兔兔使用的是PEAR的DB类实现的对MySQL的操作,DB可以实现对大量数据库的兼容

这是兔兔在写注册时用到的

$table_fields = array('username','user_password','email','name','gender','native_place','education_level','political_level','education_background','seeking_career','contact_way','reg_date');
                                $table_values = array($username,$password,$email,$name,$gender,$native_place,$education_level,$political_level,$education_background,$seeking_career,$contact_way,$reg_date);
                                $table_name   = 'user';
                                $sth = $db->autoPrepare($table_name, $table_fields, DB_AUTOQUERY_INSERT);
                                $db->execute($sth, $table_values);

建议你先去http://pear.php.net看看DB的使用
回复

使用道具 举报

发表于 2005-1-13 21:07:05 | 显示全部楼层
回复

使用道具 举报

发表于 2005-1-14 08:08:58 | 显示全部楼层
出现乱码不要怕

drupal使用unicode,默认的语言是英语,插入MySQL的数据即使是论码也能正常显示成简体中文

应该在数据库操作和字符编码上多下些功夫
回复

使用道具 举报

发表于 2005-1-17 21:08:41 | 显示全部楼层
小弟这里也遇到这样的问题还有:
在论坛提交如下的内容到mysql,但是再重其中读出来,尽显示出执行下面的代码后的结果,不知道该怎么办?正常的文字输入没问题,就是有了特殊的符号就象下面的就不行了。

<form action = "page.php" method = "post">
<input type= "text" name="like">
<input type="submit" value="send">
</form>

//我读数据的代码:
$post_text = nl2br(stripslashes($posts_info['post_text']));
//显示内容的代码:
<td width=65% valign=top>$post_text<br><br>
新手学习中希望大家能帮帮忙!!谢谢了先。
回复

使用道具 举报

发表于 2005-1-18 08:13:20 | 显示全部楼层
nl2br --  Inserts HTML line breaks before all newlines in a string

stripslashes -- Returns a string with backslashes stripped off. (\' becomes ' and so on.) Double backslashes (\\) are made into a single backslash (\).

$posts_info['post_text'] is a array, isn't it?

这样吧,你应该参考phpBB2对特殊符号的处理方法:

2.0.11版本的phpBB2已经把处理特殊符号写成自定义的function——phpbb_clean_username

function phpbb_clean_username($username)
{
        $username = htmlspecialchars(rtrim(trim($username), "\\"));
        $username = substr(str_replace("\\'", "'", $username), 0, 25);
        $username = str_replace("'", "\\'", $username);

        return $username;
}
回复

使用道具 举报

发表于 2005-1-18 13:58:07 | 显示全部楼层
$posts_info['post_text'] is a array, isn't it?
是的!
我试着将其加入了但是处理后的结果是显示了
<form action = "p
就没有了是不是要在输出是做一些改变
谢谢楼上的兄弟了!
回复

使用道具 举报

发表于 2005-1-18 14:22:22 | 显示全部楼层
not at all
回复

使用道具 举报

发表于 2005-1-18 14:29:30 | 显示全部楼层
听说如下解决乱码方法不止到公社的老大该如何具体的做:mysql-3.X的?
php向数据库写入时先用iconv转码,从数据库读出的内容用php显示时,设置charset为utf-8
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-8 14:46 , Processed in 0.072549 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表