网上大部分决绝方法都说要设置my.ini,但是在我的安装目录里面没有这个文件,于是自己闯创建的了一个文件,但是问题依然没有解决。
最后是看了一篇文章
用status查看状态。
发现
Client characterset: utf8
Conn. characterset: utf8
用命令set names 'gbk'。
再用status看一下,就改成gbk了。虽然更改成功,问题仍未解决
后记:但是最后使用时依然会出现乱码的问题,看样子必须按照大部分资料所说的要更改my.ini的设置,但是苦于找不到文件,最后看到解决方法,说是要把比如mylarge.ini文件更改为my.ini,最后测试依然不行,因为在里面找不到default-character-set的设置选项。
最后实在是无奈,于是重装了软件,因为忘记备份,原来的数据库都找不到了,最后只能重新编写数据库,偶然发现原来我的my.ini文件居然存放在了program data 文件中,里面却是也有default-character-set选项,更改为gbk后,终于不再出现乱码。问题解决看来my.ini的配置作用却是强大
通过解决这个问题找到了不少有用的指令,借着这篇文章记一下。
1、查看 MySQL 数据库服务器和数据库字符集
show variables like '%char%';
2、查看当前安装的 MySQL 所支持的字符集。
show charset;
3、设置编码:
修改my.cnf
vi /etc/my.cnf
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
保存,重启mysql即可;
修改数据库的字符集
mysql>use mydb
mysql>alter database mydb character set utf-8(utf8);
创建数据库指定数据库的字符集
mysql>create database mydb character set utf-8(utf8);
或者用mysql命令修改编码
通过MySQL命令行修改:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
set character_set_system=utf8;
set collation_connection=utf8;
set collation_database=utf8;
set collation_server=utf8;
mysql修改表、字段字符集
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只是修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
查看数据库编码:
SHOW CREATE DATABASE db_name;
查看表编码:
SHOW CREATE TABLE tbl_name;
查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;
MySQL中的字符集转换过程
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
• 使用每个数据字段的CHARACTER SET设定值;
• 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
• 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
• 若上述值不存在,则使用character_set_server设定值。
3. 将操作结果从内部操作字符集转换为character_set_results。
其他注意事项
• my.cnf中的default_character_set设置只影响mysql命令连接服务器时的连接字符集,不会对使用libmysqlclient库的应用程序产生任何作用!
• 对字段进行的SQL函数操作通常都是以内部操作字符集进行的,不受连接字符集设置的影响。
摘自:http://www.3lian.com/edu/2013/05-23/71223.html