Mysql中文乱码问题完美解决方案Word格式文档下载.docx
- 文档编号:18409451
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:6
- 大小:20.10KB
Mysql中文乱码问题完美解决方案Word格式文档下载.docx
《Mysql中文乱码问题完美解决方案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Mysql中文乱码问题完美解决方案Word格式文档下载.docx(6页珍藏版)》请在冰豆网上搜索。
很不错的解说,可以试一下
mysql乱码处理总结:
(1)java中处理中文字符正常,在cmdclient中显示乱码是字符集的问题.
(2)字段长度设置够长,但插入中文字符时提示com.mysql.jdbc.MysqlDataTruncation:
Datatruncation:
Datatoolongforcolumn错误是字符集的问题.
(3)乱码问题归根到底是字符集的问题,那就从字符集设置方面考虑,不外乎下面几个方面:
server,client,database,connection,results.
-------------------------解决办法----------------------
(1)修改my.ini(MySQLServerInstanceConfiguration文件)
#CLIENTSECTION//客户端
[client]
port=3306
[mysql]
default-character-set=gbk
#SERVERSECTION
//服务端
[mysqld]
(2)修改data目录中相应数据库目录下的db.opt配置文件
default-collation=gbk_chinese_ci
(3)数据库连接串中指定字符集
URL=jdbc:
mysql:
//yourIP/college?
user=root&
password=yourPassword&
useUnicode=true&
characterEncoding=gbk注:
在mysql4.1.0版要加useUnicode=true&
characterEncoding=gbk如果是5.0版以上的,加不加都是没有关系的!
(4)在创建数据库时指定字符集
createdatabaseyourDBCHARACTERSETgbk;
(5)在dos命令上要设置
setnamesgbk
好了,经过检查上面四个方面的设置,应该OK了!
不会出现诸如
com.mysql.jdbc.MysqlDataTruncation:
Datatoolongforcolumn等问题.
第三种方法,说有太复杂了,反到不知道怎么弄了,你试试,也许可以用得上
1.修改/etc/f文件,改成这样:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
注意:
就是加入了一句default-character-set=utf8。
2./etc/init.d/mysqldrestart重新启动mysql;
3.打开phpmyadmin,选择lang为"
Chinessimplifies(zh-utf-8)"
选择"
MySQL连接校对"
为"
utf8_general_ci"
点“显示MySQL的运行信息”--“变量”,可以看到:
charactersetclientutf8utf8
charactersetconnectionutf8utf8
charactersetdatabaseutf8utf8
charactersetresultsutf8utf8
charactersetserverutf8utf8
charactersetsystemutf8utf8
collationconnectionutf8_general_ciutf8_general_ci
collationdatabaseutf8_general_ciutf8_general_ci
collationserverutf8_general_ciutf8_general_ci
从这里可以看到character全部变成utf8了。
有人要问,为什么都要改成utf8呢?
改成GB2312不行吗?
解释如下:
我也不想改成utf8,只是phpmyadmin2.6在mysql4.1的时候只会用utf8,连其他页面的charset也都是utf8,改成gb2312一定会乱码,我们只能凑phpmyadmin了。
只有在mysql3.23的时候,phpmyadmin才会多一个gb2312的页面charset,这时候是正常的。
3.将以前的mysql3的库文件导入mysql4.1的库
有两种情况:
一是从phpmyadmin上导入,这时候你要注意的是在选择库文件的页面左下脚有个“文件的字符集:
”,默认是utf8,要改成gb2312,否则导进去乱码;
二是在linux下导入,这时候你需要先在库文件的头部加一行:
gb2312'
;
注意最后也是;
号,别漏了。
然后执行mysql-u用户名-p密码xxx.sql>
库名
导入完成以后再用phpmyadmin打开看,里面的中文字就是正确的。
4.从mysql4.1里导出库文件
一.用phpmyadmin导出
导出倒是问题不大,如果phpmyadmin的浏览页面里显示的中文是正常的,那么导出肯定也是正常的
二.在linux上导出
如果用mysqldump导出出现了乱码也没有关系,可以运行iconv来转换一下
iconv-c-fUTF-8-tGB2312库文件名>
新的gb2312的库文件名
综上所述,你要注意:
1。
尽量在需要导入的库文件的开头加入SETNAMES'
告诉mysql你要导入的是一个gb2312的文件;
2。
可能你需要这个:
utf8'
在登陆到mysql后用,把character的一些默认参数改到utf8上,有时可以减少一些困扰,不过也不是必须的。
在mysql上使用:
SHOWVARIABLESLIKE'
character_set_%'
用来查看当前的状态。
3.如果出现乱码也不要怕,一是你要注意留存原有的备份,二是用iconv来进行转化。
在正常使用之前注意做导入导出的测试,确保万无一失。
最后加一句:
www.quicklinux.org原创文章,转载请注明出处。
呵呵
邮件:
support@quicklinux.org
作者:
MySQL发布日期:
2005-12-14
我升级了MYSQL到4.1.2,phpmyadmin用的是2.6.2。
数据表里面有中文的字段中文都变成了乱码,导出数据也是乱码。
我用以前的2.5.7没有问题,想问一下,应该在phpmyadmin的那个文件里改哪个设置一下才能显示出来的是正常的中文字?
和字符相关的变量中这几个和sql很有关系:
character_set_client
character_set_connection
character_set_results
此外就是数据库中对相应字段设置的charactset,如果没有对字段设置,缺省是table的charactset,table也没有指定则缺省使用database的。
上面3个变量的作用是这样的,client表示客户端发送过来的字符集,results表示发送到客户端的字符集(这两个分开是因为发送过来和发送过去的不一定是同一个客户端),connection则在客户端和数据库起一个连接作用。
具体是这样:
比如我在mysql命令行设置client为gbk,connection为utf8,results为gbk,数据库为big5,
当我发送一个insert语句的时候,这个语句作为gbk代码,先转为utf8代码(connection),再转为big5(database)插入数据库。
而运行一个select语句的时候,从数据库得到的结果则相反的过程,由big5转为utf8,再转为gbk,你得到gbk的结果。
因此最主要的是让client和results和你使用的客户端一致。
比如你的网页是utf8编码,你就要设置这两个为utf8。
而在mysql命令行的时候,我用的是2000,需要设置为gbk
而我们用的setnamesXXX,实际上就是同时设置这3个变量为XXX。
在这样的情况下,我们可以把一个数据库中的不同表或不同字段设为不同的字符集,只要上面3个设置正确,就可以在数据库中同时使用不同的字符集。
注意要保证你的数据库中的字符已经使用了正确的字符集,比如如果一开始你设置错误,插入数据后,本身数据的编码就是不正确的,然后即使设置改回来,也不可能得到正确的显示了。
好了,随便弄了下,希望对你有所帮助
MySQL会出现中文乱码的原因不外乎下列几点:
1.server本身设定问题,例如还停留在latin1
2.table的语系设定问题(包含character与collation)
3.客户端程式(例如php)的连线语系设定问题
强烈建议使用utf8!
!
utf8可以兼容世界上所有字符!
一、避免创建数据库及表出现中文乱码和查看编码方法
1、创建数据库的时候:
CREATEDATABASE`test`
CHARACTERSET'
COLLATE'
utf8_general_ci'
2、建表的时候CREATETABLE`database_user`(
`ID`varchar(40)NOTNULLdefault'
'
`UserID`varchar(40)NOTNULLdefault'
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
但是如果你已经建了库和表可以通过以下方式进行查询。
1.查看默认的编码格式:
mysql>
showvariableslike"
%char%"
+--------------------------+---------------+
|Variable_name|Value|
|character_set_client|gbk|
|character_set_connection|gbk|
|character_set_database|utf8|
|character_set_filesystem|binary|
|character_set_results|gbk|
|character_set_server|utf8|
|character_set_system|utf8|
+--------------------------+-------------+
注:
以前2个来确定,可以使用setnamesutf8,setnamesgbk设置默认的编码格式;
执行SETNAMESutf8的效果等同于同时设定如下:
SETcharacter_set_client='
SETcharacter_set_connection='
SETcharacter_set_results='
2.查看test数据库的编码格式:
showcreatedatabasetest;
+------------+------------------------------------------------------------------------------------------------+
|Database|CreateDatabase|
|test|CREATEDATABASE`test`/*!
40100DEFAULTCHARACTERSETgbk*/|
3.查看yjdb数据库的编码格式:
showcreatetableyjdb;
|yjdb|CREATETABLE`yjdb`(
`sn`int(5)NOTNULLAUTO_INCREMENT,
`type`varchar(10)NOTNULL,
`brc`varchar(6)NOTNULL,
`teller`int(6)NOTNULL,
`telname`varchar(10)NOTNULL,
`date`int(10)NOTNULL,
`count`int(6)NOTNULL,
`back`int(10)NOTNULL,
PRIMARYKEY(`sn`),
UNIQUEKEY`sn`(`sn`),
UNIQUEKEY`sn_2`(`sn`)
)ENGINE=MyISAMAUTO_INCREMENT=1826DEFAULTCHARSET=gbkROW_FORMAT=DYNAMIC|
二、避免导入数据有中文乱码的问题
1:
将数据编码格式保存为utf-8
设置默认编码为utf8:
setnamesutf8;
设置数据库db_name默认为utf8:
ALTERDATABASE`db_name`DEFAULTCHARACTERSETutf8COLLATEutf8_general_ci;
设置表tb_name默认编码为utf8:
ALTERTABLE`tb_name`DEFAULTCHARACTERSETutf8COLLATEutf8_general_ci;
导入:
LOADDATALOCALINFILE'
C:
\\utf8.txt'
INTOTABLEyjdb;
2:
将数据编码格式保存为ansi(即GBK或GB2312)
设置默认编码为gbk:
setnamesgbk;
设置数据库db_name默认编码为gbk:
ALTERDATABASE`db_name`DEFAULTCHARACTERSETgbkCOLLATEgbk_chinese_ci;
设置表tb_name默认编码为gbk:
ALTERTABLE`tb_name`DEFAULTCHARACTERSETgbkCOLLATEgbk_chinese_ci;
\\gbk.txt'
1.UTF8不要导入gbk,gbk不要导入UTF8;
2.dos下不支持UTF8的显示;
三、解决网页中乱码的问题
将网站编码设为utf-8,这样可以兼容世界上所有字符。
如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK,GBK与GB2312的区别就在于:
GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。
1.编辑/etc/f ,在[mysql]段加入default_character_set=utf8;
2.在编写ConnectionURL时,加上?
characterEncoding=utf-8参;
3.在网页代码中加上一个"
setnamesutf8"
或者"
setnamesgbk"
的指令,告诉MySQL连线内容都要使用
utf8或者gbk;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mysql 中文 乱码 问题 完美 解决方案