mysql字符集
中文
utf8
latin1
乱码
character set
Submitted by yejr on 周一, 2012/08/20 - 17:25
之前做过的兼容性测试结果:
Submitted by yejr on 周六, 2012/08/18 - 17:35
目前infobright应用越来越多了,有些场景下需要和台管理系统共用,因此需要同时存在brighthouse和myisam两种引擎。
这时候,如果需要brighthouse引擎支持utf8字符集,需要:
1. 数据库对象创建时务必使用utf8字符集,这点尤为关键,否则不可支持utf8;
2. 数据表对象创建时也使用utf8字符集;
3. 导入文件提前转换成utf8字符集;
4. 连接infobright时,执行set names utf8;
5. 导入文件,查看字符集是否正确;
另一种场景下,可能myisam表也需要支持utf8,这个相对比较麻烦:
1. 数据库对象创建时无所谓,不强制必须是utf8;
2. 数据表对象创建时务必使用utf8字符集;
3. 将导入文件全部转换成utf8字符集的INSERT语法,直接写入数据,infobright不支持LOAD DATA INFILE方式导入utf8字符集的文件;
4. 也可以将其他非字符型字段导入后,再用update进行更新;
Submitted by yejr on 周三, 2007/12/26 - 21:33
1、) 登录服务器后,执行 SET NAMES ‘utf8’; 这样的SQL语句来设定连接字符集为 utf8
2、) 用GUI客户端(如Navicat/MySQL Front)连接服务器时,设定字符集
3、) 用 PhpMyAdmin 连接时,在登录页面选择正确的字符集
Submitted by yejr on 周二, 2007/12/25 - 20:23
尽管数据表创建时已经指定默认字符集了,但是该表里面的字段还是可以指定自己的字符集的。
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
Submitted by yejr on 周日, 2007/12/23 - 21:11
指定数据表字符集后,该数据表里的所有字符型字段默认都使用该表指定的字符集。
1、创建数据表时,指定其字符集
CREATE TABLE tbl
(
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;
2、或者采用 ALTER 语法来转换字段的字符集
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;
3、采用其他客户端工具来设定,例如 Navicat/MySQL Front/PhpMyAdmin
Submitted by yejr on 周日, 2007/12/23 - 14:17
指定数据库字符集后,该数据库下创建的表默认都采用该库指定的字符集。
1、创建数据库时,指定其字符集
CREATE DATABASE db DEFAULT CHARSET UTF8;
2、或者采用 ALTER 语法来转换字段的字符集
ALTER DATABASE db DEFAULT CHARSET UTF8;
Submitted by yejr on 周日, 2007/12/16 - 15:31
方法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
Submitted by yejr on 周二, 2007/07/24 - 22:33
Submitted by yejr on 周二, 2007/07/24 - 21:51
Submitted by yejr on 周二, 2006/07/18 - 15:17
由于存储过程中定义参数时,无法定义其字符集,因此调用存储过程的时候,会默认读取全局变量character_set_server,而且还是只读取mysqld启动时该全局变量的值作为存储过程中默认的传输字符集。因此,如果数据表/字段使用系统默认的字符集(比如latin1)的话,调用存储过程更新一些非英文的字符串字段时,就不会发生问题;但是,如果数据表/字段的字符集不是系统默认的字符集(比如默认是latin1,数据表使用的是utf8),就会出现问题了。解决办法是:在my.cnf(windows下是my.ini),增加一行:
default-character-set=utf8
或者
页面
最近评论