Alan Hou的个人博客

MySQL中文字符乱码问题

很多朋友可能都遇到了这一问题,就是向数据库的表格中插入中文显示的却是乱码,甚至在命令行中插入中文时提示内容类似下面的提示:

Rows matched: 1  Changed: 0  Warnings: 1

也就是实际执行没有成功,这时极有可能是字符集的问题(可通过show create table table_name来进行查看),这里综合网上内容记述一些有关数据库字符集编码的问题:

命令行中查看编码字符集:

 show variables like ‘collation_%’;
show variables like ‘character_set_%’;
 
修改MySQL默认字符集及转换字符集(MySQL 5.X)
1. 修改 MySQL 数据库默认字符集(MySQL Database Default Character Set)
如:alter database db_name default character set = utf8;
2. 修改 MySQL 数据表默认字符集(MySQL Table Default Character Set)
如:alter table table_name default character set = utf8;
注意:这里修改 MySQL 的默认字符集,不管是在数据库级别,还是数据表级别,对已经存储的字符数据无任何改变。只是对于新增的表或列开始使用新的字符集。
3. 转换 MySQL 数据表字符集(MySQL Table Character Set)
如MySQL 中有一个数据表 test_table,以前该表字符列数据都是以 latin1 编码格式存放的,现在想转换为 utf8 编码格式存放。可使用 MySQL 转换字符集命令:convert to character set
alter table test_table convert to character set utf8;
提示:convert to 也会把数据表 test_tabl 的默认字符集从 latin1 更改为 utf8。
注意:实际上Alan通过查看乱码和无法插入的问题就是由于默认字符集为latin1,通过上述修改您可能发现还是有同样的问题,这时由于执行的修改需要关闭命令行窗口在新开启的窗口中才会生效。
4. 转换 MySQL 数据表中某个列的字符集(MySQL Column Character Set)
alter table table_name modify col_name varchar(50) character set utf8;
这个语句把单独一个列 col_name 的字符集转换为utf8。这在用法在实际中比较少见,因为大多数情况下,都是改变整个表的字符集。
MySQL字符集修改命令
1.修改服务器级
a. 临时更改: mysql>SET GLOBAL character_set_server=utf8;
b. 永久更改:shell>vi /etc/my.cnf[mysqld]default-character-set=utf8
2.修改数据库级
a. 临时更改: mysql>SET GLOBAL character_set_database=utf8;
b. 永久更改:改了服务器级就可以了
3.修改表级
mysql>Alter TABLE table_name DEFAULT CHARSET utf8; 更改了后永久生效
4.修改列级修改示例:
mysql>Alter TABLE products CHANGE products_model products_model VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; 更 改了后永久生效
5.更改连接字符集
a. 临时更改:mysql> SET NAMES utf8;
b.永久更改: shell>vi /etc/my.cnf在[client]中增加:default-character-set=utf8
此外,在php中操作MySQL,也可以通过mysql_query(‘set names ***’)的指令有明确所使用的字符集,在Windows命令行中可直接通过charset 或SET NAMES的指令有设定字符集。
退出移动版