我在尝试运行MySql数据库的语句时遇到错误。我想要做的是将列名称的类型从BLOB更改为JSON。
以下是声明:
ALTER TABLE `main_db`.`main_table`
CHANGE COLUMN `name` `name` JSON CHARACTER SET 'utf8mb4' NULL DEFAULT NULL ;
这是工作台自动为我创建的,当我运行它时...我收到此错误:
Operation failed: There was an error while applying the SQL script to the database.
Executing:
ALTER TABLE `main_db`.`main_table`
CHANGE COLUMN `name` `name` JSON CHARACTER SET 'utf8mb4' NULL DEFAULT NULL ;
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' NULL DEFAULT NULL' at line 2
SQL Statement:
ALTER TABLE `main_db`.`main_table`
CHANGE COLUMN `name` `name` JSON CHARACTER SET 'utf8mb4' NULL DEFAULT NULL
任何帮助将不胜感激。
谢谢:)
答案 0 :(得分:1)
尝试简化命令并消除您不会改变的部分:
ALTER TABLE `main_db`.`main_table`
CHANGE COLUMN `name` `name` JSON;
答案 1 :(得分:1)
这是我的工作,明确转换,删除旧列并重命名temp列:
alter table testjson add jdata json;
update testjson set jdata = cast(convert(cast(xdata as char(999999)) using utf8) as json);
alter table testjson drop column xdata;
alter table testjson change column jdata xdata json;
这里值得一提的是LOAD..INFILE中有一个相关的技巧:
LOAD DATA LOCAL INFILE "/tmp/another.csv" INTO TABLE another(@hid, @htype, @bindata) set id=unhex(@hid), type=unhex(@htype), jdata=cast(convert(cast(@bindata as char(999999)) using utf8) as json);
答案 2 :(得分:0)
如何通过TEXT分两步将列转换为JSON?
ALTER TABLE `main_db`.`main_table` MODIFY `name` TEXT;
ALTER TABLE `main_db`.`main_table` MODIFY `name` JSON;
使用MODIFY instead of CHANGE因为您不需要重命名列。
答案 3 :(得分:0)
要获取现有数据,您需要创建一个新的json格式的temp列。 通过将数据类型转换为字符串类型,将blob列中的数据复制到temp列中。
db.Model(user).UpdateColumn(User{Name: "Hello"})
现在重命名这两列,您将获得现有数据。