使用mysql时对collate的理解

老师在建一个表的时候对一个字段设置了create database db3 charset= utf8 COLLATE utf8_general_ci,不是第一张表而且感觉建数据库的时候也已经设了字符集编码,所以查资料了解了一下这样做的原因,虽然具体不是太清楚,但对CHARACTER SET utf8 COLLATE utf8_general_ci也有了一定了解。
DEFAULT CHARACTER SET utf8:数据库字符集。设置数据库的默认编码为utf8,utf8中间不要"-";
COLLATE utf8_general_ci:数据库校对规则。ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感;还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分大小写。
如果建表的时候选择的是区别大小写的规则而查询的时候又暂时不想区别, 可以用类似 WHERE column_name COLLATE utf8_general_ci = ‘xxx’ 的写法改变查询使用的校对规则,新建数据 库时一般选用utf8_general_ci就可以了。
每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。CREATE DATABASE 和 ALTER DATABASE语句有一个可选的子句来指定数据库字符集和校对规则:
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。
如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。分别修改数据库,表,字段编码:
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci
ALTER TABLE tbl_name CHANGE ’column_name’ ’column_name’ 类型 CHARACTER SET utf8 COLLATE utf8_general_ci
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name CHARACTER SET utf8 COLLATE utf8_general_ci

你可能感兴趣的:(linux)