MySQL字符集设置的学习


use db_name;
status;  #查看数据库db_name的编码
show create database db_name;  #查看数据库db_name的编码
show create table tb_name;  #查看表tb_name的编码
status;  #查看数据库服务器端和客户端字符集
show variables like 'character%';

====

查看字符集设置:

mysql> show variables like 'collation_%';
mysql> show variables like 'char_%';

====

mysql> alter database db_a character set gbk;
#修改数据库的字符集编码方式

参考链接深入Mysql字符集设置

MySQL字符集设置
• 系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
– 还有以collation_开头的同上面对应的变量,用来描述字符序。

在my.cnf中设置MySQL的默认字符集编码为utf-8

change mysql default character set to UTF8 in my.cnf?
To set the default to UTF-8, you want to add the following to my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
原文链接:

http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf


在默认情况下,如果不在安装的时候指定编码的话,MySQL会默认使用latin1的编码(不知道为什么不用utf8作为默认编码?因为MySQL最初是瑞典的一家公司(MySQL AB)开发的,所以默认的字符集是latin1),然后,各种问题就来了……

不修改配置文件,只将当前的表/数据库存取设置为utf8

  1. 设置表的编码为utf8(可以先使用:show create table tb_name; 查看当前编码格式)
  2. 连接的时候指定编码为utf8
  3. 文件的格式、字符串的编码为utf8

可以在建立database、table的时候手动指定编码方式,然后在存入数据的时候将连接的方式也修改为对应的编码方式即可(可能会需要在显示之前先执行命令“set names ‘utf8’;”这样之类的),之后在显示的时候再执行个命令“set names ‘utf8’;”应该就差不多了。


《“MySQL字符集设置的学习”》 有 4 条评论

  1. 如何快速定位到MySQL的配置文件的位置:
    `$ mysqld –help –verbose
    $ mysqld –help –verbose | grep “Default options” -A 1
    $ sudo find / -type f -iname “my.cnf”
    `
    http://stackoverflow.com/questions/2482234/how-to-know-mysql-my-cnf-location
    http://stackoverflow.com/questions/3270326/how-to-find-out-the-location-of-currently-used-mysql-configuration-file-in-linux

    默认情况下,你用yum安装了MySQL就会自动生成一个my.cnf配置文件,但是对于部分Percona版本来说,它不会自动生成my.cnf这个配置文件,需要你手动创建并显示指定。[http://stackoverflow.com/questions/7020836/where-is-perconas-my-cnf-file]
    [https://bugs.launchpad.net/percona-server/+bug/673844]

  2. 如何确定MySQL用的是哪个配置文件?
    http://stackoverflow.com/questions/580331/determine-which-configuration-file-is-being-used
    http://ronaldbradford.com/blog/how-do-i-identify-the-mysql-my-cnf-file-2010-03-09/
    http://dba.stackexchange.com/questions/703/confirm-that-my-cnf-file-has-loaded-ok
    `
    1.未运行状态下
    $ strace “$(which mysqld)” | grep –color “my.cnf”
    2.运行状态下
    $ “$(which mysqld)” –verbose –help | grep -A 1 “Default options”
    `

  3. UTF8字符集的表怎么直接转UTF8MB4?
    https://mp.weixin.qq.com/s/VWVKy16gMJ_kFeICsyMiVw
    `
    utf8是utf8mb4的子集,一般情况下,应该是可以直接修改表字符集的。

    方法一:修改表默认字符集
    mysql> alter table j1 default character set utf8mb4;
    随后再修改所有字符型列的字符集
    mysql> alter table j1 modify name varchar(20) character set utf8mb4 not null default ”;

    方法二:也是执行ALTER TABLE来修改,但有更简单的解法
    mysql> alter table j1 convert to character set utf8mb4;
    备注:上面两种方法,其实是有区别的。

    采用方法一,如果遇到某个列字符集转换完后字节数超限了,会提示错误。
    而采用方法二,如果遇到某个列字符集转换完后字节数超限了,则会将这个列数据类型转换成可以容纳更大长度的类型,比如从 TEXT 转成 LONGTEXT 等。

    方法三
    如果不放心,可以用mysqldump逻辑备份方式,用utf8mb4字符集把数据备份出来,新建表,恢复回去,应该也可以的。
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注