使用mysql 经常会遇到编码问题,而导致程序出现乱码,mysql 在以下几个地方会涉及到编码格式
- 数据库编码
- 服务器编码
- 连接编码
- 客户端编码
下面是一个典型的示例, 运行 mysql -u root
查看编码 mysql>status
mysql Ver 14.7 Distrib 4.1.14, for Win32 (ia32)
Connection id: 90
Current database: yitian
Current user: ODBC@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.14
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: gbk
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 1 hour 28 min 21 sec
Server characterset: latin1 服务器使用的编码为 latin1
Db characterset: gbk 数据库 yitian的编码为 GBK
Client characterset: latin1 client 端为 latin1
Conn. characterset: latin1 连接的编码为 latin
如果我们要使用支持中文的 gbk 数据库, 就要在创建数据库时,使用下面的语法
GBK 使用
CREATE DATABASE yitian DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
utf8 使用
CREATE DATABASE IF NOT EXISTS yitian default charset utf8 COLLATE utf8_general_ci;
如果要修改已存在的数据库设置使用
alter database testdb character set utf8
然后在程序中连接时也应该设定相应的字符集 , 使用
SET CHARACTER SET GBK;
这时再查看看下编码
mysql>status
mysql Ver 14.7 Distrib 4.1.14, for Win32 (ia32)
Connection id: 90
Current database: yitian
Current user: ODBC@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.14
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 1 hour 33 min 22 sec
就可以使用程序正确写入和读取数据了
如果要改变数据库的默认编码可以修改 my.ini
设置 my.ini
#default-character-set=GBK
default-character-set = UTF8