mysql字符集

[MySQL FAQ]系列 -- 如何设定连接服务器时的字符集

1、) 登录服务器后,执行 SET NAMES ‘utf8’; 这样的SQL语句来设定连接字符集为 utf8
2、) 用GUI客户端(如Navicat/MySQL Front)连接服务器时,设定字符集
3、) 用 PhpMyAdmin 连接时,在登录页面选择正确的字符集

[MySQL FAQ]系列 -- 如何为一个字段指定字符集

尽管数据表创建时已经指定默认字符集了,但是该表里面的字段还是可以指定自己的字符集的。

1、创建数据表时,指定其字符集

CREATE TABLE tbl
(
......
name CHAR(20) CHARACTER SET UTF8,
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;

2、或者采用 ALTER 语法来转换字段的字符集

ALTER TABLE tbl CHANGE name name CHAR(20) CHARACTER SET utf8;

3、采用其他客户端工具来设定,例如 Navicat/MySQL Front/PhpMyAdmin

[MySQL FAQ]系列 -- 如何为一个数据表指定字符集

指定数据表字符集后,该数据表里的所有字符型字段默认都使用该表指定的字符集。

1、创建数据表时,指定其字符集

CREATE TABLE tbl
(
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;

2、或者采用 ALTER 语法来转换字段的字符集

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;

3、采用其他客户端工具来设定,例如 Navicat/MySQL Front/PhpMyAdmin

[MySQL FAQ]系列 -- 如何为一个数据库指定字符集

指定数据库字符集后,该数据库下创建的表默认都采用该库指定的字符集。

1、创建数据库时,指定其字符集

CREATE DATABASE db DEFAULT CHARSET UTF8;

2、或者采用 ALTER 语法来转换字段的字符集

ALTER DATABASE db DEFAULT CHARSET UTF8;

[MySQL FAQ]系列 -- 如何更改MySQL的默认字符集

方法1、 用 SET 语法来指定,不加 "GLOBAL" 的话就只对本次会话有效

SET [GLOBAL] character_set_client     = utf8;
SET [GLOBAL] character_set_connection = utf8;
SET [GLOBAL] character_set_database   = utf8;
SET [GLOBAL] character_set_results    = utf8;
SET [GLOBAL] character_set_server     = utf8;

方法2、 也用SET语法,只对本次会话有效

SET NAMES 'utf8';

方法3、) 直接修改 my.cnf,增加一行内容,然后重启 MySQL,使之全局生效

default-character-set = utf8

推出第一个免费工具CCT

太多次接到网友关于字符集问题的帮助需求了,最后主要集中在文件字符集的转换上,有些网友对转换过程不太熟悉,因此本站提供该工具:
转换文件内容字符集工具 Charset Convert Tool(CCT) ,主要是配合 小谈MySQL字符集 一起试用,欢迎报告bug。

转换文件内容字符集工具(CCT)

转换文件内容字符集工具

转换文件内容字符集工具 Charset Convert Tool(CCT) 第1版 - 在线演示 (by yejr: imysql@imysql.cn)

基本功能: 自助字符集转换工具,目前主要提供简体中文、繁体中文、UTF8几种常见字符集的互相转换。
          在MySQL从4.1以下版本升级到4.1及以上版本时经常能碰到字符集问题,可以利用本工具将导
          出的SQL文件转换成合适的字符集。
          通过本工具导出的SQL文件不支持MySQL 4.1以下版本,因为它们不支持自定义字符集。




请上传原文件:


原文件字符集:     目标字符集:




注1: 免费版本支持的文件最大尺寸为2MB, 超过2MB需要采用付费或者其他方式, 请单独联系我。
注2: 本工具尚在beta版本中,如有问题请发邮件给我。


MySQL 存储过程的字符集问题

由于存储过程中定义参数时,无法定义其字符集,因此调用存储过程的时候,会默认读取全局变量character_set_server,而且还是只读取mysqld启动时该全局变量的值作为存储过程中默认的传输字符集。因此,如果数据表/字段使用系统默认的字符集(比如latin1)的话,调用存储过程更新一些非英文的字符串字段时,就不会发生问题;但是,如果数据表/字段的字符集不是系统默认的字符集(比如默认是latin1,数据表使用的是utf8),就会出现问题了。解决办法是:在my.cnf(windows下是my.ini),增加一行:

default-character-set=utf8

或者

  

小谈MySQL字符集

首先,这片文章纯粹是我的个人经验之谈,适用于我常见的环境及项目中.
个人建议,数据库字符集尽量使用utf8(HTML页面对应的是utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上可能无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.
接下来是完整的一个例子:
1.创建数据库表

聚合内容