MySQL的字符集
字符集:string类型的属性
系统层:mysql系统字符集
库层:库字符集
表层:表字符集
列层:列属性字符集
字符集级联性:向上级联
mysql系统字符集 默认级联 操作系统字符集
库字符集 默认级联 mysql系统字符集
表字符集 默认级联 库字符集
列值字符集 默认级联 表字符集
(注:列字符集是针对已有元组的列属性值来讲的)
字符集的修改性质:不可下推级联
对于已existed的东东,修改其上级字符集,不可下推级联至其。需手动修改。
示例解释:
场景:windows下默认安装了mysql,建库demoDB,库中一表user,表中一列name
分析:windows下默认字符集lantin1,级联特性--》mysql字符集lantin1,demoDB字符集lantin1,user表字符集lantin1,列name字符集lantin1。
操作:修改mysql字符集为utf8。
分析:不可下推级联性,则demoDB库的字符集还是lantin1。user、name同。
操作:再修改demoDB字符集为utf8。
分析:不可下推级联性,user的字符集还为lantin1。name同。
注:若有实例元组存在,name字段中已有值,其值以为lantin1,这牵扯到实际值字串了,非简单修改字符集标志就能解决,需对值进行字符集转换。
字符集修改:
mysql系统字符集修改:
文件:window下配置文件my.ini,Linux下配置文件my.conf
修改项:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8 #注,windows下mysql5.5必须为character-set-server
#不可是default-character-set=utf8,否则mysql服务无法启动
库字符集修改:
ALTER DATABASE demoDB CHARCTER SET utf8
表字符集修改:
ALTER TABLE user [DEFAULT] CHARACTER SET utf8 #修改表的默认字符集
列的字符集怎么改呢?
1、列值字符集转换(且对已有的值进行字符集转换 lantin1 --》 utf8)
ALTER TABLE user CONVERT TO CHARACTER SET utf8 #CONVERT TO指定对各string类型的列值进行转换
2、指定某列(至改表中一列)
ALTER TABLE user MODIFY name VARCHAR(64) CHARACTER SET utf8
3、若不想转换列中已有值的字符集,只想改列字符集属性呢?
字符集只针对string类型的(CHAR,VARCHAR,TEXT)
可以先将列类型由string类型转为对应的二进制类型(BINARY,VARBINARY,BLOD),再修改列属性
ALTER TABLE user CHANGE name name BOLD
ALTER TABLE user CHANGE name name TEXT CHARACTER SET utf8
修改方式:永久&临时
mysql系统字符集临时修改:
SET GLOBAL character_set_server=utf8;
永久修改:
上面配置文件修改方式
若有不对处,欢迎交流!