试图将MYSQL的表字段类型从BLOB更改为JSON

时间:2017-02-18 04:45:13

标签: php mysql json database blob

我在尝试运行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

任何帮助将不胜感激。

谢谢:)

4 个答案:

答案 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"})

现在重命名这两列,您将获得现有数据。