MySQL 修改字符集
参数说明:
一般会使用UTF-8进行编码,UTF-8支持世界上的绝大部分语言,但是UTF-8每个字符编码占3个字节,在数据传输时会比较占用带宽,如果数据库及其连带程序的语言主要是特定的某几种语言,可以根据实际要求选择字符编码,如中文编码字段的编码可以使用GBK,每个字符只占2个字节,相对于UTF-8更加节省空间;
MySQL中对字符编码的操作
1)查看数据库的当前的字符编码
mysql > show variables like 'characher%'
参数说明:
charcter_set_system:mysql所在系统使用的默认字符集;character_set_server:服务器默认的字符集;character_set_database:默认的数据库字符集;cha racter_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;
);