首页 > 数据库 >mysql数据库编码、字段编码、表编码 专题

mysql数据库编码、字段编码、表编码 专题

时间:2022-12-20 23:03:14浏览次数:42  
标签:编码 utf8mb4 utf8 数据库 mysql 格式 NULL


CREATE DATABASE `mybatis-subject` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */

其中的 /*!40100 ...*/ 这部分注释会被MySQL执行,表示服务端版本号大于4.1.00时会被执行。

mysql> 
mysql> show create database mybatis-subject;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-subject' at line 1
mysql>
mysql> show create database 'mybatis-subject'
;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''mybatis-subject'' at line 1
mysql>
mysql> show create database `mybatis-subject`;
+-----------------+-------------------------------------------------------------------------------------------------+
| Database | Create Database |
+-----------------+-------------------------------------------------------------------------------------------------+
| mybatis-subject | CREATE DATABASE `mybatis-subject` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */ |
+-----------------+-------------------------------------------------------------------------------------------------+
1 row in set

mysql>

 

关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 详细emoji表情与utf8mb4的关系 。
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。
从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。

utf8mb4 is a superset of utf8
utf8mb4兼容utf8,且比utf8能表示更多的字符。

mysql/Java服务端对emoji的支持

 

(1267, Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=')

 报错原因:表关联时,关联字段的字符串集不一致。
解决办法:将需要关联的表之间的字符串改成一样

ALTER TABLE todo_list CONVERT TO CHARACTER 
SET utf8mb4 COLLATE utf8mb4_unicode_ci;


 

最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat

create database ssi default character set utf8;

 

mysql> create database  test  default character set utf8mb4 collate utf8mb4_unicode_ci;

 

CREATE TABLE `t_user` (
`USER_ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_NAME` char(30) NOT NULL,
`USER_PASSWORD` char(10) NOT NULL,
PRIMARY KEY (`USER_ID`),
KEY `IDX_NAME` (`USER_NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

 

CREATE TABLE `category` ( `Id` binary(16) NOT NULL,

`UniqueName` varchar(64) NOT NULL,
`Name` varchar(64) NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

我把表的编码格式改成 utf8. 查看表category 发现表的DDL 变成了,

CREATE TABLE `category` (

`Id` binary(16) NOT NULL,
`UniqueName` varchar(64) character set latin1 NOT NULL,
`Name` varchar(64) character set latin1 NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

发现在原来的表中之前定义的列(字段)的编码类型不会因为表的编码格式而变化,还是latin1(拉丁文格式), 但新建列的类型为是UTF8格式的。由此可见MYSQL中的数据编码格式已经粒子化到 单位“列”。 在建 数据库的时候可以指定数据库编码格式,在这之后所建的表和列的编码格式都会以此格式为默认格式。若之后想改数据库的编码格式的话,想要把之前的表和列的编码格式都改过来的话就要一一改过来了。所以,我们要使不担心数据库的编码格式,只要在 MYSQL的安装目录下面X:\Program File\MySQL5 下面找到一个my.ini 文件,用记事本打开找到

default-character-set=你要设置的编码格式 。修改其格式即可。在后面建库,建表,建字段就不要做其它的设置,除非你要特别要求。

KIGG例子中 EF + MYSQL 的乱码原因是因为程序提交给数据库是文件是UTF8格式的但数据库中字段接收的格式却是latin1 格式的,所以只要将列改为UTF8格式即可。

总结:对于惯用微软的的SQLSERVER 的用户来说很少观注数据库数据的编码格式,因为微软已经帮用户做完了那些边角的工作,所以使我们忽略很多重要的事。在用MYSQL中要注意 其中的数据库,表,列 对应的编码格式没有包含关系,最终决定内容以什么编码格式保存下来还是 定义列时指定的编码(`Name` varchar(64) character set latin1 NOT NULL,),在建库和表时设置编码格式只是相当与为自己的下一级设置默认编码格式。


1.修改数据库的编码
将数据库(test)的编码方式修改为utf8,如:
ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

2.修改表的编码
将表(test)的编码方式修改为utf8,如:
ALTER TABLE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

3.修改字段的编码
将表(test)中字段(name)的编码方式修改为utf8,如:
ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL; 

标签:编码,utf8mb4,utf8,数据库,mysql,格式,NULL
From: https://blog.51cto.com/u_15147537/5956980

相关文章

  • Linux下如何安装MySQL?
    目标主机:centos8MySQL安装所有平台的MySQL下载地址为:https://dev.mysql.com/downloads/repo/yum/。挑选你需要的MySQLCommunityServer版本及对应的平台。注意:安......
  • MySQL中这14个牛逼的功能,惊艳到我了!!!
    前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用groupby进行分组的场......
  • 数据库路由器 ICX
    实时并发数据库事务处理同步复制器和负载平衡器   ———通向真正数据库高可用性,高可靠性,高性能之路一、产品概述   数据库路由器--ICX是美国宾夕法尼亚大学计算机......
  • 高性能Mysql主从架构的复制原理及配置详解(转)
    温习《高性能​​MySQL​​》的复制篇.1复制概述     Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过......
  • 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
    携手创作,共同成长!这是我参与「掘金日新计划·8月更文挑战」的第6天,点击查看活动详情面试官:我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性?心......
  • MYSQL问题解决
    1、MySQL错误日志里出现:14033110:08:18[ERROR]Errorreadingmasterconfiguration14033110:08:18[ERROR]Failedtoinitializethemasterinfostructure14033110:......
  • MySQL 全局锁、表级锁、行级锁,你搞清楚了吗
    大家好,我是小林。最近重新补充了《MySQL有哪些锁》文章内容:增加记录锁、间隙锁、net-key锁增加插入意向锁增加自增锁为innodb_autoinc_lock_mode=2模式时,为什么......
  • c++ 通过ODBC连接达梦数据库
    安装达梦数据库建立数据源,位置:开始》》windows管理工具》》ODBC数据源  测试通过 打开编译器编写代码连接这个数据库 #include"stdafx.h"#include<Windows.......
  • this is incompatible with sql_mode=only_full_group_by 解决方案 mysql
    之前在进行数据库迁移时,出现过这种错误,网上查了下,原因和解决方法如下:一、报错原因分析 这个错误发生在mysql5.7.5版本及以上版本会出现的问题,我的版本是5.7.x linu......
  • 架构设计(八):数据库的水平扩展和垂直扩展
    架构设计(八):数据库的水平扩展和垂直扩展作者:Grey原文地址:博客园:架构设计(八):数据库的水平扩展和垂直扩展CSDN:架构设计(八):数据库的水平扩展和垂直扩展数据库的扩展有两种方......