修改及查看mysql数据库的字符集

msyql 查看修改字符集的方法 平时设置字符集感觉很少,默认都是系统设置的校对集字符。更多是出现报错了,插入中文字符的数据失败了,才会去查看表字段的字符集,再查看表格的字符集,最后查数据库字符集,一级一级往上定位。 阅读详情

                   修改及查看mysql数据库的字符集



操作系统:Windows Server 2008 R2

Mysql版本:mysql-5.6.29-winx64


事由:MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)

一、登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:

 
?
1
2
3
4
5
6
7
8
9
10
11
12
+ --------------------------+----------------------------+
| Variable_name | Value |
+ --------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+ --------------------------+----------------------------+

 

character_set_database和character_set_server的默认字符集还是latin1。
 
二、最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置的字段细节):
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1、在[client]字段里加入 default - character - set =utf8,如下:
 
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default - character - set =utf8
 
2、在[mysqld]字段里加入 character - set -server=utf8,如下:
 
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character - set -server=utf8
 
3、在[mysql]字段里加入 default - character - set =utf8,如下:
 
[mysql]
no -auto-rehash
default - character - set =utf8

 

修改完成后,service mysql restart重启mysql服务就生效。注意:[mysqld]字段与[mysql]字段是有区别的。这点在网上没人反馈过。
 
使用SHOW VARIABLES LIKE ‘character%’;查看,发现 数据库编码全已改成utf8。
 
?
1
2
3
4
5
6
7
8
9
10
11
12
+ --------------------------+----------------------------+
| Variable_name | Value |
+ --------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+ --------------------------+----------------------------+

 


附My.ini 配置文件内容:


# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[WinMySQLAdmin]
#指定mysql服务启动的启动文件
Server=D:\MySQL\Mysql-Windows\mysql-5.6.29-winx64\bin\mysql.exe

[mysql]
no-auto-rehash
default-character-set=utf8

[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
 basedir = D:\MySQL\Mysql-Windows\mysql-5.6.29-winx64
 datadir = D:\MySQL\Mysql-Windows\mysql-5.6.29-winx64\data
 port = 3306
 server_id = 1
# default-character-set=gbk
#default-character-set=utf8
character-set-server=utf8

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

[client]
#设置mysql客户端的字符集
#default-character-set=gbk
default-character-set=utf8
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 


//-----------------------------------//

mysql的sql_mode 模式

https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html


1. sql_mode模式 
mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!我们可以通过以下方式查看当前数据库使用的sql_mode: 

[java]  view plain  copy
  1. mysql> select @@sql_mode;  
  2. +----------------------------------------------------------------+  
  3. | @@sql_mode                                                     |  
  4. +----------------------------------------------------------------+  
  5. | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |  
  6. +----------------------------------------------------------------+  

或者通过查看系统变量方式:
[java]  view plain  copy
  1. mysql> show variables like 'sql_mode%'\G;  
  2. *************************** 1. row ***************************  
  3. Variable_name: sql_mode  
  4.         Value: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  

mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。 
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。 
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 

1.2 ANSI模式 
[java]  view plain  copy
  1. mysql> set @@sql_mode=ANSI;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3.   
  4. mysql> create table test(name varchar(4), pass varchar(4));  
  5. Query OK, 0 rows affected (0.03 sec)  
  6.   
  7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  
  8. Query OK, 2 rows affected, 2 warnings (0.02 sec)  
  9. Records: 2  Duplicates: 0  Warnings: 2  
  10.   
  11. mysql> show warnings;  
  12. +---------+------+-------------------------------------------+  
  13. | Level   | Code | Message                                   |  
  14. +---------+------+-------------------------------------------+  
  15. | Warning | 1265 | Data truncated for column 'name' at row 1 |  
  16. | Warning | 1265 | Data truncated for column 'pass' at row 1 |  
  17. +---------+------+-------------------------------------------+  
  18. 2 rows in set (0.00 sec)  
  19.   
  20. mysql> select * from test;  
  21. +------+------+  
  22. | name | pass |  
  23. +------+------+  
  24. | aaaa | aaaa |  
  25. | bbbb | bbbb |  
  26. +------+------+  
  27. 2 rows in set (0.00 sec)  

我们可以看到,在ANSI模式下,当我们插入数据时,未满足列长度要求时,数据同样会插入成功,但是对超出列长度的字段进行截断,同时报告warning警告。 

1.3 STRICT_TRANS_TABLES模式
[java]  view plain  copy
  1. mysql> set @@sql_mode=STRICT_TRANS_TABLES;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3.   
  4. mysql> create table test(name varchar(4), pass varchar(4));  
  5. Query OK, 0 rows affected (0.02 sec)  
  6.   
  7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  
  8. ERROR 1406 (22001): Data too long for column 'name' at row 1  
  9.   
  10. mysql> show errors;  
  11. +-------+------+------------------------------------------+  
  12. | Level | Code | Message                                  |  
  13. +-------+------+------------------------------------------+  
  14. | Error | 1406 | Data too long for column 'name' at row 1 |  
  15. +-------+------+------------------------------------------+  
  16. 1 row in set (0.00 sec)  
  17.   
  18. mysql> select * from test;  
  19. Empty set (0.00 sec)  

我们可以看到,在STRICT_TRANS_TABLES模式下,当我们插入数据时,mysql会严格的进行数据的校验,当发现插入列值未满足要求,直接报告error错误,保证了错误数据无法插入到数据库中。

1.3 TRADITIONAL模式
[java]  view plain  copy
  1. mysql> set @@sql_mode=TRADITIONAL;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3.   
  4. mysql> create table test(name varchar(4), pass varchar(4));  
  5. Query OK, 0 rows affected (0.02 sec)  
  6.   
  7. mysql> insert into test values('aaaaa','aaaaa'),('bbbb','bbbb');  
  8. ERROR 1406 (22001): Data too long for column 'name' at row 1  
  9.   
  10. mysql> show errors;  
  11. +-------+------+------------------------------------------+  
  12. | Level | Code | Message                                  |  
  13. +-------+------+------------------------------------------+  
  14. | Error | 1406 | Data too long for column 'name' at row 1 |  
  15. +-------+------+------------------------------------------+  
  16. 1 row in set (0.00 sec)  
  17.   
  18. mysql> select * from test;  
  19. Empty set (0.00 sec)  

TRADITIONAL模式与STRICT_TRANS_TABLES模式执行的结果,在这种情况下一致。 
[java]  view plain  copy
  1. mysql> select @@sql_mode\G;  
  2. *************************** 1. row ***************************  
  3. @@sql_mode: STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,E  
  4. RROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER  
  5. 1 row in set (0.00 sec)  

看一下TRADITIONAL模式,我们发现在TRADITIONAL模式下,对所有的事务存储引擎,非事务存储引擎检查,日期类型中的月和日部分不能包含0,不能有0这样的日期(0000-00-00),数据不能除0,禁止grant自动创建新用户等一些校验。

注意:我们这里设置的sql_mode都是session级别的。另外,可以直接修改my.ini文件,找到sql_mode,然后设置新的模式即可!

例如: 

    vi /etc/my.cnf

在[mysqld]下面添加如下列:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES





MySQL查看修改数据库字符集 根据MySQL官方文档解释,目前MySQL中的utf8字符集,实际上是utf8mb3字符集,即用3个字节的Unicode编码;而utf8mb4才是真正意义上的4个字节的UTF8编码。不过在较新的MySQL版本(8.0.32)中,已经只能查询到utf8mb3和utf8mb4两个UTF8编码,而看不到名为utf8的字符集 阅读详情

相关推荐

mapbox高阶,加载倾斜摄影

本文详细介绍如何基于mapbox-gl v3.8.0版本实现倾斜摄影的加载,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 307

查看MySQL数据库字符

MySQL数据库字符

the_shy369的博客 1万+

科研牛马千万不要错过!手把手教你用AI精准匹配真实参考文献,仅需一个专业应用+两个提示词指令

当然也可以借助生成式AI,如GPT-5.2、Gemini 3 Pro粘贴段落,输入设计好的提示词,让模型根据段落内容匹配参考文献,并正确引用到段落合适位置,再按规范格式输出参考文献列表。阅读我提供的【正文文本】,为其中的关键论点寻找真实的、权威的参考文献(优先来源于Nature, Science, IEEE, ACM, PubMed等),并插入引用。若在段落中已经引用好了参考文献,也有参考文献列表,担心引用位置不当或论点、论述逻辑与文献不够契合,则可以用以下结构化提示词,让AI辅助审查。

智能AI让学术科研更容易 996

mysql字符集查看与设置

一、查看 MySQL 数据库服务器和数据库字符集 mysql> show variables like '%char%'; +--------------------------+-------------------------------------+------ | Variable_name | Value ...

Hehuyi_In的博客 1万+

mysql 查看-修改-字符集-排序集

语法:create table 表名(属性)default character set = 字符集;语法:alter database 库名 default character set 字符集;语法:alter table 表名 convert to character set 字符集;在命令行上修改字符集后,MySQL重启后,设置会消失,恢复成MySQL配置文件中的字符集设置。设置字符集一般有两种方法,一种是在创建表的时候设置字符集,另一种是表建成之后修改字符集。2.查看MYSQL所支持的字符集

Dav_2099的博客 3989

MySQL系列】数据库字符集修改

通过将数据库、表和列的字符集统一更改为utf8mb4,我们可以确保数据存储具有更高的兼容性和灵活性。特别是对于需要存储多语言内容或特殊字符的应用程序,utf8mb4字符集提供了广泛的支持。👍🏻呗。❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄👍 👍 👍🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙。

CSDN站内信: https://i.csdn.net/#/msg/chat/qyj19920704 2万+

MySQL查看修改数据库字符集的方法

一、查看字符集 1.查看MYSQL数据库服务器和数据库字符集 方法一:show variables like '%character%'; 方法二:show variables like 'collation%'; 2.查看MYSQL所支持的字符集 3.查看库的字符集 语法:show database status from 库名 like 表名; 4.查看表的字符集 语法:sh...

huzecom的博客 5万+

MySQL查看修改数据库字符集

摘要1:https://blog.csdn.net/leo__1990/article/details/93504528 摘要2:https://blog.csdn.net/kikajack/article/details/84668924 摘要3:https://blog.csdn.net/weixin_30888707/article/details/96772090 1.查看MySQL数据库服务器和数据库MySQL字符集。 SHOW VARIABLES LIKE 'character%'; show

weixin_40123451的博客 405

MySQL查看修改数据库字符集

--查看数据库字符集 show variables like character/_set/_%; show variables like collation_%; --设置数据库字符编码为utf8 set names utf8 alter database databaseName character set utf8;   //修改数据库databaseName的

236

mysql数据库字符集编码的查看修改

<br />在搭建产品demo的时候,开发者环境下往数据库同步数据时正常,但是其他使用者用同样程序及数据库初始化脚本搭建时,总是会出现入库中文为乱码的现象。这里的原因很可能就是数据库编码的问题。<br />下面的内容将介绍如何查看现在数据库的编码及如何修改:<br />1,查看编码:<br />命令:show variables like 'character_set_%'<br />结果,如:<br /><br /> <br />2,修改已设定编码:<br />如对character_set_databa

保持一颗空杯的心态! 6083

mysql alter database_MySQL修改数据库:ALTER DATABASE用法简介

MySQL 数据库中只能对数据库使用的字符集和校对规则进行修改数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET | [ ...

weixin_32955881的博客 529

MySQL查看修改字符集

语法:alter table 表名 modify 字段名 字段属性 character set 字符集;语法:create table 表名(属性)default character set = 字符集;语法:alter database 库名 default character set 字符集;语法:alter table 表名 convert to character set 字符集;设置字符集一般有两种方法,一种是在创建表的时候设置字符集,另一种是表建成之后修改字符集查看MYSQL所支持的字符集

qq_39297233的博客 4456

Mysql数据库查看修改字符集

MYSQL 字符集问题 MySQL字符集支持(Character Set Support)有两个方面:       字符集(Character set)和排序方式(Collation)。 对于字符集的支持细化到四个层次:       服务器(server),数据库(database),数据表(table)和连接(connection)。 1.MySQL默认字符集 MySQL

程序员成长之路 660

mysql 查看数据库字符集_查看mysql字符集修改数据库、数据表、字段字符集

查看所有表的字符集SELECT table_name, table_type, engine, version, table_collation FROM information_schema.tables WHERE table_schema = 'test_db11' ORDER BY table_name DESC;查看单张表字段的字符集SHOW FULL COLUMNS FROM sw_t...

weixin_31966453的博客 463

mysql 跳转_MySQL 数据库的创建、修改、删除、跳转

一. 创建数据库[]代表可选项。IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,注意在 MySQL 中不区分大小写。[DEFAULT] CHARACTER SET:指定数据库的默认字符集。[DEFAULT] COLLATE:...

weixin_30312037的博客 861

MySQL 设定、修改字符集

📢前方高能预警!你的"Emoji存不进数据库"世纪难题有救了!👾 💡包教包会の骚操作套餐: 1️⃣ 建表咒语大全:utf8mb4の神秘仪式✨ 2️⃣ 字符集侦探指南🔍(附赠祖传select语句) 3️⃣ 改库改表改字段の作死三连⚠️ 4️⃣ 隐藏菜单:把已有数据库当俄罗斯方块重拼的禁术🎮 👉友情提示:看完不转发的,明天数据库必现"锟斤拷"⚠️

刘伟佳的博客 1万+

2.MySQL ---- 修改数据库字符集(日常小技巧)

一劳永逸解决MySQL 建表无法使用中文的问题

youstory的博客 3139

修改 MySQL 数据库字符集

1️⃣ 创建数据库并指定字符集 2️⃣ 创建数据库时未指定字符集,后期修改数据库字符集

D的博客 4789

修改MySQL字符集

要永久修改和这三个变量的值,以便它们默认使用utf8(或更好的utf8mb4),您通常需要在MySQL客户端的启动命令或配置文件中进行设置,而不是在MySQL服务器配置文件中(my.cnf或my.ini中的[mysqld]部分)。

m0_50246395的博客 2614

MysqlMysql 字符集与底层原理

- 查看 mysql 默认字符集 SHOW VARIABLES LIKE 'character_%';-- 查看 mysql 默认字符排序 SHOW VARIABLES LIKE 'collation_%';Valueutf8mb4utf8mb4utf8mb4binaryutf8mb4utf8mb4utf8mb3与Value。

zzd13546036394的博客 1782

华为保时捷默认铃声Mate40RS

华为Mate40RS 默认铃声。包括:通知提示音、闹钟铃声、电话铃声。先下载文件,然后在华为手机“设置--声音和振动”:来电铃声,默认通知铃声。闹钟铃声需要去闹钟App中设置。亲测,保时捷的铃声比普通的铃声更好听、高级!!!

上一篇: Oracle RAC 环境下的连接管理
下一篇: windows 配置apache+php+mysql环境
Q0_麦田守望者
博客等级 码龄19年 14粉丝 33原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值