简单的列更改查询不需要';在MySQL 5.7中工作

简单的列更改查询不需要';在MySQL 5.7中工作,mysql,mysql-workbench,mysql-5.7,Mysql,Mysql Workbench,Mysql 5.7,我有一个由MySQL Workbench 8创建的更新查询,如下所示: ——MySQL工作台同步 --生成时间:2019-12-16 00:30 --型号:新型号 --版本:1.0 --项目:项目名称 --作者:user0 设置@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0; 设置@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0; 设置@OLD_SQL_MODE

我有一个由MySQL Workbench 8创建的更新查询,如下所示:

——MySQL工作台同步
--生成时间:2019-12-16 00:30
--型号:新型号
--版本:1.0
--项目:项目名称
--作者:user0
设置@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0;
设置@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0;
设置@OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='ALLOW_INVALID_DATES';
更改表格“最佳图片库”。“k96qw图片库”
更改列'language``语言'NCHAR(7)字符集'utf8mb4'对比'utf8mb4\U unicode\U ci'非空默认值'*';
设置SQL\u模式=@OLD\u SQL\u模式;
设置外键检查=@OLD\u FOREIGN\u KEY\u CHECKS;
设置唯一检查=@OLD\u UNIQUE\u CHECKS;
对我来说,它看起来很好,但当我运行时,它失败了:

Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' NOT NULL DEFAULT '*'' at line 2
SQL Code:
        ALTER TABLE `best_bpgallery`.`k96qw_bpgallery_images` 
        CHANGE COLUMN `language` `language` NCHAR(7) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' NOT NULL DEFAULT '*' 

SQL script execution finished: statements: 3 succeeded, 1 failed

Fetching back view definitions in final form.
Nothing to fetch

我甚至将这个查询与其他查询进行了比较,结果对我来说还不错。发生了什么事?我缺少什么?

例如,您必须将nchar更改为varchar

ALTER TABLE `best_bpgallery`.`k96qw_bpgallery_images` 
CHANGE COLUMN `language` `language` VARCHAR(7) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' NOT NULL DEFAULT '*' ;

nchar不支持字符集

nchar?你确定这都是关于MySQL的吗?@fifonik是的,这是MySQL Workbench.Hm构建的查询。没见过。您确定可以在数据类型上指定字符集/排序吗?请注意,在此页面上,NCHAR没有
ALTER TABLE
语句所具有的显式字符集。该定义似乎包括“使用一些预定义的字符集”,因此使其成为可选的似乎与目的背道而驰。问题显然是NCHAR。我可以在没有字符集和校对的情况下使用NCHAR,但当我添加任何其他内容时,它就会失败@丹布莱克,你说得对。正如这里写的,是的,我现在在文档中看到了@丹布莱克的评论为我指明了正确的方向。不过还是谢谢你。