MySQL解决字符乱码问题

来源:互联网 发布:备案的是域名还是主机 编辑:程序博客网 时间:2024/06/06 19:00
MySQL 修改字符集




MySQL中对字符编码的操作

1)查看数据库的当前的字符编码
  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)修改字符集参数
  1. set charatcer_set = charset_name
  2. example: set character_set_database = utf8
使用 set names charset_name 等同于以下三个语句:
mysql> SET character_set_client = charset_name;
mysql> SET character_set_resultscharset_name;
mysql> SET collation_connection = @@collation_database;

3)查看字符验证集
  1. show collation like 'latin1%';





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


1)产生中文乱码的主要原因:
① 服务端创建数据库,插入中文数据乱码:
         - 直接在控制台进行的插入操作:server,database参数设置问题;
         - 通过sql脚本导入数据:sql的字符编码方式和database的编码方式不兼容;
② 服务端中文显示正常,客户端获取服务端的结果集乱码:
        -  客户端程序的使用的字符编码和 results 编码不兼容;
③ 客户端向服务端进行数据写入操作,服务端中文数据乱码:
         - 客户端的程序使用本身使用的字符编码 和 client ,connect 的编码方式不兼容;

2)解决方式:
① 方式一:直接在服务端修改MySQL字符集参数,参见如上;
② 方式二:在 创建/修改 数据库或数据表,单独指定其字符编码,同时将客户端、服务端程序同一编码为相应的字符编码;
指定数据库编码:
  1. //创建时指定
  2. Create Database db_name
  3. Default Character Set charset_name
  4. [Default Character Collate collation_name];
  5. //对已有数据库进行修改
  6. Alter Database db_name
  7. Default Character Set charset_name
  8. [Default Character Collate collation_name];
指定数据表编码
  1. //创建时指定
  2. Create Table tb_name(column_list)
  3. Default Character Set charset_name
  4. [Default Character Collate collation_name];
  5. //对已有数据表进行修改
  6. Alter Table db_name
  7. Default Character Set charset_name
  8. [Default Character Collate collation_name];
指定数据字段编码
  1. //创建时指定
  2. Create Table tb_name(
  3. column_name Type Character Set charset_name [Collation collation_name]
  4. );
  5. 如:
  6. Create Table test(
  7. col varchar(10) Character Set utf8;
  8. );

一般会使用UTF-8进行编码,UTF-8支持世界上的绝大部分语言,但是UTF-8每个字符编码占3个字节,在数据传输时会比较占用带宽,如果数据库及其连带程序的语言主要是特定的某几种语言,可以根据实际要求选择字符编码,如中文编码字段的编码可以使用GBK,每个字符只占2个字节,相对于UTF-8更加节省空间;







0 0
原创粉丝点击