数据库字符集

时间:2023-01-25 07:31:46

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 

查看数据库编码:
SHOW CREATE DATABASE db_name;  
查看表编码:
SHOW CREATE TABLE tb_name;  
查看字段编码:

SHOW FULL COLUMNS FROM tb_name;

示例:

CREATE TABLE `U_USER_TAG_REF` (
  `username` varchar(40) character set utf8 COLLATE utf8_bin NOT NULL,
  `tags` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;