易截截图软件、单文件、免安装、纯绿色、仅160KB

MySQL开发小结

       最近正在进行一个二次开发接口的项目,在开发过程中发现:我们之前使用的处理客户端和WEB之间编码兼容问题的方法是存在问题的。由于为了支持多语言,数据库表中类型为varchar的字段,他们的字符集都设置成了utf8。之前的做法是客户端将字符串的编码改成utf8编码,然后将该utf8编码的字符串直接写入数据库,这样WEB(使用PHP语言开发的)就只需要简单的修改就能支持多国语言,并且还能和客户端的多语言兼容。由于我们的程序在连接数据库时,使用的是默认的字符集(latin1),所以当我们直接查看数据库表中的数据时,看到的就是貌似乱码的数据(这就是存入字符串的utf8编码)。但当使用ASP.NET开发WEB时,同样的做法就无效了。查阅MySQL手册后,猜想设置连接的字符集可能可以解决这个问题。经测试,确实可行。这里总结一下解决方法:
1.更改连接的字符集的方法
MySQL提供了两种方法来更改连接的字符集,这两种方法分别是:
(1)SET NAMES语句;
(2)API函数mysql_set_character_set()
MySQL手册中建议最好使用(2)来修改连接的字符集,因为“如果需要更改连接的字符集,应该使用mysql_set_character_set函数,而不是执行SET NAMES语句。mysql_set_character_set的工作方式类似于SET NAMES,但它还能影响mysql_real_escape_string所使用的字符集,而SET NAMES不能。”
2.执行mysql插入语句时,返回1366的错误的解决办法
导致这个问题的原因是:当将mysql的连接的字符集改为utf8后,如果插入数据库表中的字符串不是utf8编码的串,则会出现这个错误。在将连接更改为utf8后,读出来的字符串数据也是utf8编码的。所以我需要将字符串在utf8和ansi之间相互转换,转换的主要代码如下:
void AnsiToUtf8(const char* szAnsi, char* szUtf8, int nSize)
{
int nChar = MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, NULL, 0);
if (nChar > 0)
{
wchar_t* pBufw = new wchar_t[nChar];
MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, pBufw, nChar);
WideCharToMultiByte(CP_UTF8, 0, pBufw, -1, szUtf8, nSize, NULL, NULL);
delete[] pBufw;
}
}
void Utf8ToAnsi(const char* szUtf8, char* szAnsi, int nSize)
{
int nChar = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, 0);
if (nChar > 0)
{
wchar_t* pBufw = new wchar_t[nChar];
MultiByteToWideChar(CP_UTF8,


相关文档:

mysql 自增列相关问题整理

MYSQL自增列
1.关键字 :auto_increment
2.自增用法
例:
CREATE TABLE animals ( id mediumint not null auto_increment,
name char(30) not null,
primary key (id));
3.关于自增
Q:怎么获得当前的自增的最大值?
A:select @@identity
Q:怎么获得table的当前自增最大值?
A:select max(id) from table ......

mysql union语法

一 UNION语法
代码 复制代码
SELECT ...   
UNION [ALL | DISTINCT]   
SELECT ...   
[UNION [ALL | DISTINCT]   
SELECT ...]  
SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
UNION用于把 ......

Apache::DBI与MYsql的持续连接太多的问题

我经过这几天研究发现mod_perl提供的持续连接并不智能(也许是我还没有找到更
好的解决方案),如果脚本中的参数和初始化的参数不一样,在内存中会出现两个
句柄。
Apache::DBI->connect_on_init("DBI:mysql:mysql:localhost","root","root",
{
PrintError => 1,
RaiseError => 0,
AutoCommit => ......

mysql innodb 性能优化

默认情况下,innodb的参数设置的非常小,在生产环境中远远不够用
比如最重要的两个参数
innodb_buffer_pool_size
默认是8M
innodb_flush_logs_at_trx_commit 默认设置的是1 也就是同步刷新log(可以这么理解)
innodb_buffer_pool_size:
这是InnoDB最重要的设置,对InnoDB性能有决定性的影响。默认的设置只有8M,所以 ......

MySQL临时表建立

MySQL建立临时表的语句如下:
CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);
--LOCK TABLES article read;
--先插入数据到临时表
INSERT INTO tmp SELECT article, MAX(price) from shop GRO ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号