更改MYSQL数据库不区分大小写

今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢?

  后来请教了一个老师才搞定,原来是LINUX下的MYSQL默认是要区分表名大小写的,哎,弄了那么旧,害死我了。

  让MYSQL不区分表名大小写的方法其实很简单:

  1.用ROOT登录,修改/etc/my.cnf

  2.在[mysqld]下加入一行:lower_case_table_names=1

  3.重新启动数据库即可。

1、Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;

2、用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;

lower_case_table_names参数详解:

lower_case_table_names=0

其中0:区分大小写,1:不区分大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写。

mysql默认是对字母的大小写不区分的

mysql> create table t1(

-> username varchar(10));

Query OK, 0 rows affected (0.09 sec)

mysql> insert into t1 values('you'),('You'),('YOU');

Query OK, 3 rows affected (0.05 sec)

Records: 3 Duplicates: 0 Warnings: 0

对这个表,缺省情况下,下面两个查询的结果是一样的:

mysql> select * from t1 where username = 'you';

+------+

| username |

+------+

| you |

| You |

| YOU |

+------+

3 rows in set (0.00 sec)

mysql> select * from t1 where username = 'YOU';

+------+

| username |

+------+

| you |

| You |

| YOU |

+------+

3 rows in set (0.00 sec)

如果想让MYSQL知道你输入的字母是大写还是小写的,修改表:

mysql> alter table t1 change username username varchar(10) binary;

Query OK, 3 rows affected (0.20 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t1 where username = 'you';

+------+

| username |

+------+

| you |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where username = 'YOU';

+------+

| username |

+------+

| YOU |

+------+

1 row in set (0.00 sec)

如果你只是想在SQL语句中实现的话:

mysql> select * from t1 where username = binary 'YOU';

+------+

| username |

+------+

| YOU |

+------+

1 row in set (0.02 sec)

mysql> select * from t1 where username = binary 'you';

+------+

| username |

+------+

| you |

+------+

1 row in set (0.00 sec)

如果不想这么麻烦而想服务一开启就让大小写一致的话:

可以修改my.ini或者my.cnf

[mysqld]

lower_case_table_names=1

(0:区分;1:不区分)

然后重启MYSQL服务。

mysql> show variables like '%case_table%';

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

| Variable_name | Value |

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

| lower_case_table_names | 1 |

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

1 row in set (0.00 sec)

注:WINDOWS系统不用修改,系统默认就是1

LINUX 系统默认是0。因为LINUX下的脚本都是区分大小写的。

Windows 环境下大小写不敏感

CREATE TABLE tab (

 id INT AUTO_INCREMENT,

 val VARCHAR(10),

 PRIMARY KEY (id)

);

mysql> select * from tab;

Empty set (0.00 sec)

mysql> select * from Tab;

Empty set (0.00 sec)

mysql> select * from `Tab`;

Empty set (0.00 sec)

在MySQL中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name系统变量确定,可以在启动mysqld时设置。lower_case_tables_name可以采用下面的任一值:

值 含义

0 使用CREATE TABLE或CREATE DATABASE语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。

1 表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为Windows和Mac OS X系统中的默认值。

2 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。注释:只在对大小写不敏感的文件系统上适用! InnoDB表名以小写保存,例如lower_case_tables_name=1。

在Windows和Mac OS X中,lower_case_tables_name的 默认值是1。

如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix中,my_tables和MY_tables是两个不同的表,但在Windows中,这两个表名相同。要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:

     在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。

     在Unix中使用lower_case_tables_name=0,在Windows中使用lower_case_tables_name=2。这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Unix中,由于在Unix中大小写很重要,如果大小写不正确,它们不工作。

例外:如果你正使用InnoDB表,在任何平台上均应将lower_case_tables_name设置为1,以强制将名转换为小写。

请注意在Unix中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。

用惯了windows下面的不区分大小写的mysql语句,到了linux下面还真的很多不习惯。

在MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。

奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。

或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。

当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。

换句话说,如果你希望在数据库里面创建表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。否则的话你会发现同样的sqldump脚本在不同的操作系统下最终导入的结果不一样(在Windows下所有的大写字符都变成小写了)。

即:unix下面默认是区分大小写的,而winodws下面是不区分的。为了设置unix下面不区分大小写,要设置unix下面的数据库表名都是小写的,并在配置文件my.conf上面,的mysqld字段增加lower_case_table_name=1,1为不区分大小写,0是区分大小写。。。并/etc/init.d/mysql restart即可。。。

Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小 写;lower_case_table_names参数详解:lower_case_table_names = 0其中 0:区分大小写,1:不区分大小写MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:1、数据库名与表名是严格区分大小写的;2、
表的别名是严格区分大小写的;3、列名与列的别名在所有的情况下均是忽略大小写的;4、变量名也是严格区分大小写的;MySQL在Windows下都不区 分大小写。3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:A、创建时设置:CREATE TABLE T(A VARCHAR(10) BINARY);B、使用alter修改:ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;C、mysql
table editor中直接勾选BINARY项。

时间: 2025-01-30 03:55:33

更改MYSQL数据库不区分大小写的相关文章

更改MYSQL数据库不区分大小写表名

今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢? 后来请教了一个老师才搞定,原来是LINUX下的MYSQL默认是要区分表名大小写的,哎,弄了那么旧,害死我了. 让MYSQL不区分表名大小写的方法其实很简单: 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 3.重新启动数据库即可.

linux中更改MySQL数据库存储路径和端口

linux中更改MySQL数据库存储路径和端口 假设我们以更改到/opt/data目录下为倒: 1.opt目录下建立data目录 mkdir /opt/data 2.停掉MySQL服务进程 mysqladmin -u root -p shutdown 3.把/var/lib/mysql整个目录移到/opt/data mv /var/lib/mysql /opt/data/ 这样就把MySQL的数据文档移动到了/opt/data/mysql下 . 4.my.cnf文档配置 默认安装时my.cnf在

更改Mysql数据库存储位置的具体步骤

首先把mysql的服务先停掉,更改MySQL配置文件My.ini中的数据库存储主路径,将老的数据库存储主路径中的数据库文件和文件夹复制到新的存储主路径,接下来重启搞定   一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开MySQL默 认的安装文件夹C:Program FilesMySQLMySQL Server 5.1中的my.ini文件,点击记事本顶部的"编辑","查找",在查找内容中输入datadir后并点击&

更改MySQL数据库的编码为utf8mb4

CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ; mysql> create database daily default character set utf8mb4 collate utf8mb4_unicode_ci; 原文:http://blog.csdn.net/woslx/article/details/49685111 utf-8编码可能2个字节.3个字节.4个字节的字符

如何更改mysql数据库目录的保存位置

独立主机的数据库目录一般是:/var/lib/mysql 可以使用命令查看位置 我们可以修改吗?当然可以,只要修改一下配置文件中的sock位置,指定data目录,然后重启一下mysql即可. Vi /etc/my.cnf Vi /etc/init.d/mysql 然后重启mysql,便可以看到data目录已经到指定位置了. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/

CentOS Linux更改MySQL数据库目录位置

由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录.下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/home/mysql_data/mysql目录的具体操作: 1.首先我们需要关闭MySQL,命令如下:    service mysqld stop 2.然后是转移数据,为了安全期间,我们采用复制命令cp,先找到mysql的原目录    cd /var/lib    ls    运行这个命令之后就会看到mysql

CentOS Linux更改MySQL数据库目录位置具体操作_Mysql

引言: 由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录. 下面我整理一下把MySQL从/var/lib/mysql目录下面转移到/home/mysql_data/mysql目录的具体操作:  1.首先我们需要关闭MySQL,命令如下: service mysqld stop 2.然后是转移数据,为了安全期间,我们采用复制命令cp,先找到mysql的原目录 cd /var/lib ls 运行这个命令之后就会看到mysql的目录了,然

MySQL数据库不区分大小写配置方法

1.用root登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:  代码如下 复制代码 lower_case_table_names=1 3.重新启动数据库 lower_case_table_names = 0 其中 0:区分大小写,1:不区分大小写

CentOS中如何更改MySQL数据库目录的位置

由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录. 下面我简单整理一下这几天把MySQL从/var/lib/mysql目录下面转移到/home/mysql_data/mysql下面具体操作 1.首先我们需要关闭MySQL,命令如下: &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;  service mysqld stop 2.然后是转移数据,为了安全