失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql cnf和ini区别_再谈mysql的配置文件my.ini or my.cnf (之一) .

mysql cnf和ini区别_再谈mysql的配置文件my.ini or my.cnf (之一) .

时间:2023-10-31 02:57:44

相关推荐

mysql cnf和ini区别_再谈mysql的配置文件my.ini or my.cnf (之一) .

偶尔碰到有人问使用mysql命令行,老让人输入--default-character-set=gbk之类无聊的选项,让人烦。让人多输入了几个字符,确实有点不对劲。

加上有时候自己有时候DIY,很少在windows上使用安装的版本,总是解压缩,然后放一个my.ini到解压缩目录下边的某一个特殊的位置。这样,mysql命令行,缺省情况下,反而load不到这个配置文件了。

关于my.ini文件的加载顺序,详见:/hexiong/blog/item/313534a8b7e0dcbdcb130cc5.html

以windows为例,它会这样加载:

C:/WINDOWS/fC:/WINDOWS/my.iniC:/f C:/my.ini

至于$installdir/my.ini,嘿, 不是安装版,这个变量估计是读不到了。

上述四个文件,只要前面的某一个文件加载成功,就不再加载后边指定的配置文件了。

所以,要想使mysql命令行直接使用gbk字符集,有下述方法:

1. 命令行:

mysql -u test -p --default-character-set=gbk

2. 命令行:

mysql --defaults-file=-u test -p

注意 --defaults-file永远要放到第一个参数的位置

3. 直接制作一个客户端版本的my.ini,如:

#Uncomment or Add only the keys that you know how works.

#Read the MySQL Manual for instructions

[client]

port = 3306

default_character_set=gbk

把它存到c:/my.ini

这里需要说明的是:

如果你定制的mysql中my.ini文件本来就在上边4个路径里头,直接修改里边[client]下的default_character_set值为gbk好可。否则就可以生成一个专为client使用的my.ini

方法3虽然方便,但因为是全局配置文件,所以有时候不免会相互影响,尤其是一台机器有多个mysql。

这个时候,可以使用命令行:

d:/>mysql -u test -p --default-character-set=latin1

Enter password: ********

Welcome to the MySQL monitor. Commands end with ; or /g.

Your MySQL connection id is 10 to server version: 5.0.9-beta-nt

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

mysql> show variables like 'char%';

+--------------------------+-------------------------------------------+

| Variable_name | Value |

+--------------------------+-------------------------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | gbk |

| character_set_results | latin1 |

| character_set_server | gbk |

| character_set_system | utf8 |

| character_sets_dir | d:/mysql-5.0.9-beta-win32/share/charsets/ |

+--------------------------+-------------------------------------------+

7 rows in set (0.00 sec)

--default-character-set=latin1会覆盖全局文件my.ini中[client]的字符集选项值。

当然,如果我们仔细查看源代码,还会发现$INSTALLDIR指的就是环境变量:MYSQL_HOME,呵呵。

如果你指定了MYSQL_HOME,在找不到前边4个文件的时候,它会去查找$MYSQL_HOME/f或my.ini

相关源码如下:

static const char **init_default_directories(MEM_ROOT *alloc)

{

const char **dirs;

char *env;

int errors= 0;

dirs= (const char **)alloc_root(alloc, DEFAULT_DIRS_SIZE * sizeof(char *));

if (dirs == NULL)

return NULL;

bzero((char *) dirs, DEFAULT_DIRS_SIZE * sizeof(char *));

#ifdef __WIN__

{

char fname_buffer[FN_REFLEN];

if (my_get_system_windows_directory(fname_buffer, sizeof(fname_buffer)))

errors += add_directory(alloc, fname_buffer, dirs);

if (GetWindowsDirectory(fname_buffer, sizeof(fname_buffer)))

errors += add_directory(alloc, fname_buffer, dirs);

errors += add_directory(alloc, "C:/", dirs);

if (my_get_module_parent(fname_buffer, sizeof(fname_buffer)) != NULL)

errors += add_directory(alloc, fname_buffer, dirs);

}

#elif defined(__NETWARE__)

errors += add_directory(alloc, "sys:/etc/", dirs);

#else

errors += add_directory(alloc, "/etc/", dirs);

errors += add_directory(alloc, "/etc/mysql/", dirs);

#if defined(DEFAULT_SYSCONFDIR)

if (DEFAULT_SYSCONFDIR != "")

errors += add_directory(alloc, DEFAULT_SYSCONFDIR, dirs);

#endif /* DEFAULT_SYSCONFDIR */

#endif

if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV))))

errors += add_directory(alloc, env, dirs);

/* Placeholder for --defaults-extra-file=*/

errors += add_directory(alloc, "", dirs);

#if !defined(__WIN__) && !defined(__NETWARE__)

errors += add_directory(alloc, "~/", dirs);

#endif

return (errors > 0 ? NULL : dirs);

}

就分析这么多了。

阅读(1796) | 评论(0) | 转发(0) |

如果觉得《mysql cnf和ini区别_再谈mysql的配置文件my.ini or my.cnf (之一) .》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。