在下周公子

  • 首页
  • 域名收藏
  • SEM搜索引擎营销
  • 操作系统
    • 服务器应用
  • 特色专题
    • 跑步运动
  • VPS主机推荐
  • 搜索
在下周公子
三十而立,学以致用
  1. 首页
  2. 服务器应用
  3. SQL Server
  4. 正文

Mysql 高版本导入低版本的问题

2023年12月26日 1483点热度 0人点赞 0条评论

自动获得时间函数

在 MySQL 中,当您设置一个 DATETIME 或 TIMESTAMP 类型的列默认值为 current_timestamp 时,您需要确保该默认值是有效的,并且您使用的 MySQL 版本支持将 current_timestamp 作为默认值。

在较老的 MySQL 版本中(如 5.5 版本之前),DATETIME 类型的列并不支持 DEFAULT CURRENT_TIMESTAMP,而只有 TIMESTAMP 类型的列支持这一默认值。如果您的 MySQL 版本较新(5.6 及以上),则这两种类型都支持 CURRENT_TIMESTAMP 作为默认值。

针对您提供的 SQL 语句中的错误 #1067 - Invalid default value for 'creation_date',可能的解决方法如下:

  1. 如果您的 MySQL 版本是 5.6 或以上,确保您正确地使用了 CURRENT_TIMESTAMP:
`creation_date` datetime DEFAULT CURRENT_TIMESTAMP,
  1. 如果您的 MySQL 版本低于 5.6,您可以更改列类型为 TIMESTAMP:
`creation_date` timestamp DEFAULT CURRENT_TIMESTAMP,
  1. 如果您希望继续使用 DATETIME 类型并且不能升级 MySQL 版本,您可以在应用程序逻辑中处理时间戳的插入,而不是依赖数据库的默认值。

另外,请检查您的 MySQL 服务器的 SQL 模式设置。某些模式(如 NO_ZERO_DATE)可能会影响 DATETIME 列和默认值。

您可以使用以下命令查看当前的 SQL 模式:

SELECT @@sql_mode;

如果发现 NO_ZERO_DATE 在结果中,您可以通过更改 SQL 模式来移除它。

最后,如果您做了上述的更改并且仍然遇到问题,那可能是其它的配置或语法错误引起的。确保您的语句符合您当前 MySQL 版本的语法要求。

VARCHAR字符串255改为190个字符

错误 #1071 - Specified key was too long; max key length is 767 bytes 发生在尝试创建一个索引,但索引的长度超过了InnoDB表允许的最大字节长度。在MySQL的早期版本中,InnoDB表每个索引的最大长度为767字节。

此限制对于使用utf8mb4字符集的列尤其需要注意,因为每个字符最多可以占用4个字节,这意味着一个VARCHAR(255)的列就可能达到1020字节(255字符 * 4字节/字符),超过767字节的限制。

为了解决这个问题,你有几个选择:

  1. 减少字符列的大小:
    缩减 VARCHAR 字段的长度,以确保索引的大小不会超过767字节的限制。例如,使用 VARCHAR(191) 而不是 VARCHAR(255),因为 191 * 4 = 764 字节在限制内。
  2. 指定索引的前缀长度:
    对于 VARCHAR 和 TEXT 类型的字段,你可以指定一个前缀长度来创建索引,例如:
CREATE INDEX part_of_name ON table_name (column_name(191));
```
  1. 更改表的ROW_FORMAT:
    如果你正在使用MySQL 5.7或更高版本,你可以将InnoDB表的行格式设置为DYNAMIC或COMPRESSED来支持更长的索引:
ALTER TABLE table_name ROW_FORMAT=DYNAMIC;
```
  1. 升级数据库:
    如果你使用的是MySQL的旧版本,升级到MySQL 5.7或更高版本允许最大索引长度为3072字节。
  2. 更改字符集:
    如果不需要使用utf8mb4字符集,可以改用utf8字符集,每个字符最多3个字节。
  3. 配置InnoDB大前缀:
    如果不能升级MySQL版本,可以在my.cnf或my.ini配置文件中启用innodb_large_prefix选项。这将允许最大索引长度为3072字节,但前提是表使用DYNAMIC或COMPRESSED行格式。
[mysqld]
innodb_large_prefix = 1
innodb_file_format = Barracuda
innodb_file_per_table = 1
```

在配置文件中做出这些更改后,重启MySQL服务使设置生效。

在你的情况下,你可能需要调整join_key和family_name字段的长度,或者选择上述解决方案中的一种来减少索引的大小。

 

标签: 暂无
最后更新:2023年12月26日

zhou

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 zhoubin.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备09065757号-10