MYSQL57升级80后,由于字符集

MYSQL8.0已经很多年了,但是,但是,但是,还有很多公司和业务项目在MYSQL5.6,5.7上继续奋斗,这还不是一个重要的问题,重要的问题是早期在MYSQL5.7上的一些基础,并未进行改变后到了MYSQL8上的使用一段时间产生的问题。

这里在MYSQL5.6,MYSQL.5.7上大部分的表还都是utf8,defaultcharset=utf8而在这些数据库升级的情况下,表基本上是照搬到MYSQL8.0上的,但是后续会产生一个问题。建立新的表。此次我们采用MYSQL最新的版本之一,MYSQL8.来进行相关的问题的分析和查找。

下面就是一个典型的例子,在创建一个MYSQL的表的情况下,如果开发部指定defaultcharset=utf8则默认建立新表就是utf8mb4,而这样就会产生一个严重的问题。

一个数据库中的表的字符集不一致。然后就会产生一个问题,两个表的字符集不同,如果两个表之间的查询是不关联的,这到不会造成什么严重的问题,而如果这两个表产生了之间的关联性那么问题就出现了。

我们创造一个奇怪的数据库,以及表,这里的表的字符集在utf8和utf8mb4之间混合着。

在这样的情况下,会产生如下一些假设,下面是一些表的表结构,其中orders的表,是UTF8MB4格式排序是utf8mb4__ai_ci,而我们的payments表是utf8mb3的格式。

CREATETABLE`orders`(

`ordernumber`varchar()CHARACTERSETutf8NOTNULL,

`orderDate`dateNOTNULL,

`requiredDate`dateNOTNULL,

`shippedDate`dateDEFAULTNULL,

`status`varchar(15)CHARACTERSETutf8NOTNULL,

`


转载请注明:http://www.aierlanlan.com/rzgz/5931.html