您的位置:首页 > 数据库 > MySQL

MySQL解决字符乱码问题

2017-03-04 17:49 239 查看
MySQL 修改字符集

MySQL中对字符编码的操作


1)查看数据库的当前的字符编码

mysql > show variables like 'characher%'


 


参数说明:

charcter_set_system:mysql所在系统使用的默认字符集;

character_set_server:服务器默认的字符集;

character_set_database:默认的数据库字符集;

character_set_client:当查询请求离开客户端后,进行编码使用的字符集;

character_set_connection:服务器接收到客户端的查询请求,使用的字符集;

character_set_results:服务器发送结果集,或返回错误信息到客户端之前,使用的字符集;

如果不希望服务器执行任何转换,设置character_set_results为NULL:
mysql> SET character_set_results = NULL;


2)修改字符集参数

set charatcer_set = charset_name



example: set character_set_database = utf8


使用 set names charset_name 等同于以下三个语句:

mysql> SET character_set_client = charset_name;


mysql> SET character_set_results = charset_name;


mysql> SET collation_connection = @@collation_database;


3)查看字符验证集

show collation like 'latin1%';


解决创建数据库时的中文乱码方法


1)产生中文乱码的主要原因:
① 服务端创建数据库,插入中文数据乱码:
         - 直接在控制台进行的插入操作:server,database参数设置问题;

         - 通过sql脚本导入数据:sql的字符编码方式和database的编码方式不兼容;
② 服务端中文显示正常,客户端获取服务端的结果集乱码:
        -  客户端程序的使用的字符编码和 results 编码不兼容;
③ 客户端向服务端进行数据写入操作,服务端中文数据乱码:
         - 客户端的程序使用本身使用的字符编码 和 client ,connect 的编码方式不兼容;

2)解决方式:
① 方式一:直接在服务端修改MySQL字符集参数,参见如上;
② 方式二:在 创建/修改 数据库或数据表,单独指定其字符编码,同时将客户端、服务端程序同一编码为相应的字符编码;

指定数据库编码:

//创建时指定

Create Database db_name

Default Character Set charset_name

[Default Character Collate collation_name];


//对已有数据库进行修改

Alter Database db_name

Default  Character Set charset_name

[Default  Character Collate collation_name];



指定数据表编码

//创建时指定

Create Table tb_name(column_list)

Default Character Set charset_name

[Default Character Collate collation_name];



//对已有数据表进行修改

Alter Table db_name

Default  Character Set charset_name

[Default  Character Collate collation_name];


指定数据字段编码

//创建时指定

Create Table tb_name(

column_name Type Character Set charset_name [Collation collation_name]

);



如:

Create Table test(

col varchar(10) Character Set utf8;

);


一般会使用UTF-8进行编码,UTF-8支持世界上的绝大部分语言,但是UTF-8每个字符编码占3个字节,在数据传输时会比较占用带宽,如果数据库及其连带程序的语言主要是特定的某几种语言,可以根据实际要求选择字符编码,如中文编码字段的编码可以使用GBK,每个字符只占2个字节,相对于UTF-8更加节省空间;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: