mysql编码问题总结

网上查了一些mysql编码相关的资料,在这里整理下,不对的地方欢迎各位批评指正。

1. mysql字符集相关的变量:

- character_set_server:默认的内部操作字符集

– character_set_client:客户端来源数据使用的字符集

– character_set_connection:连接层字符集

– character_set_results:查询结果字符集

– character_set_database:当前选中数据库的默认字符集

– character_set_system:系统元数据(字段名等)字符集

– 还有以collation_开头的同上面对应的变量,用来描述字符序。

2. mysql提供了不同粒度的字符集控制:

控制粒度 查看字符集
连接(connection)
character_set_connection
字段(field) show full fields from TableName
表(table) show create table TableName
数据库(database) character_set_database 或 show create database DataBaseName
mysql服务器(server) character_set_server

在创建数据库、表、字段的时候,各个粒度上的字符集都是可以指定的,也可以不指定,这样的话就使用上一级默认的字符集。

下面分别看看创建数据库、表、字段时对字符集的控制。

3.1 创建数据库

(1)查看当前系统server字符集是latin1

(2)创建数据库(不指定编码)

可以看到新创建的数据库的字符集和server的字符集相同

(3)指定数据库字符集

新创建的数据库字符集和server字符集并不相同,而是使用了自己的字符集utf8

(4)修改server的字符集为utf8

(5)再次使用默认字符集创建数据库

新的数据库使用了和server相同的编码

3.2 创建表

(1)当前字符集设置

数据库编码为latin1

(2) 创建表

name字段指定了字符集为uft8, address字段采用默认设置

(3) 插入中文测试

可以看到,采用name字段正常显示,address字段出现了乱码

4. 实践建议

实践当中,建议创建数据库的时候就指定好db的字符集,如下:

create database testdb default charset utf8

之后创建表、字段的时候可以不指定字符集,默认集成db的字符集设定。

当然db创建好之后也可以修改db的编码:

ALTER DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改表的编码:ALTER TABLE test DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改字段的编码:  ALTER TABLE test CHANGE address address VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

修改了address字段的编码,原先的数据仍然不能正常显示,因为之前插入数据的时候,客户端传入的是utf8格式,存在latin1无法编码的字符,数据在

进程字符集转换的时候出现了损坏,查询的时候已经无法得到完整的插入时的数据了

但是新插入的中文数据可以正常显示

参考:

mysql 更改库表字段的编码

mysql 字符集设置

时间: 2024-12-15 07:19:04

mysql编码问题总结的相关文章

mysql编码问题

mysql编码设置 mysql> SHOW VARIABLES LIKE 'character_set_%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | latin1 || character_set_connect

Mysql编码

查看Mysql编码两种命令: (1)mysql> show variables like 'character%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connec

修改Mysql编码集

通过MySQL命令行修改:mysql> set character_set_client=utf8;Query OK, 0 rows affected (0.00 sec)mysql> set character_set_connection=utf8;Query OK, 0 rows affected (0.00 sec)mysql> set character_set_database=utf8;Query OK, 0 rows affected (0.00 sec)mysql>

查看修改mysql编码方式[转载]

MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: >show variables like 'character%';+--------------------------+----------------------------+| Variable

MySQL编码设置方法 MySQL编码为utf8设置方法

mysql的默认编码是拉丁,我每次JSP制作网页用insert语句插入数据库时汉字都会显示成问号,安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码.以下是命令行修改为utf-8编码的过程,以支持中文. (1)关闭mysql服务 [plain] view plaincopy service mysql stop (2)修改 /etc

Mysql编码, Mysql编码流程, Mysql编码顺序, Mysql编码原理, Mysql编码修改依据

编码查看方式以及解释说明: 需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: >show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +-----------------------

mysql编码详解

在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true&characterEncoding=utf-8 2.编辑/etc/my.cnf 在[mysqld]下添加 default-character-set=utf8 在[client]下添加 default-character-set=utf8   可是这样做的原理是什么?为什么这样做就能解决问题那? 逐

MYSQL 编码的设置

你是不是在被中文乱码所困扰??? 那就往下看吧 如果你是windows的用户,先打开cmd.exe   打入命令 mysql  如果不行那就是环境变量有问题,把mysql的bin放到环境变量的path里 接下来就是在my.ini修改character-set-server=utf8 大功告成 真是深坑! MYSQL 编码的设置

mysql编码、数据表编码查看和修改总结

1,查看自己安装的mysql的编码 2.查看Mysql支持的编码 3.查看数据库编码 4.查看数据表编码(show create table user \G;) 5.修改my.ini文件来修改编码:加上default-character-set=字符集(utf8.gbk.gb2312等) 6.命令行修改:alter database da_name default character set 'charset' :或  set names 'charset':或alter database te