向phpMyAdmin导入SQL查询遇1064语法错误,如何修复?
解决MySQL创建JSON类型表时的1064语法错误问题
别着急,这个问题我碰到过好几次,根源其实是MySQL版本不支持JSON类型导致的!
为什么会报错?
JSON类型是MySQL在5.7.8版本才正式引入的特性,而你用的XAMPP如果是比较旧的版本,自带的MySQL版本大概率低于5.7.8,这时候数据库就识别不了JSON这个字段类型,直接抛出语法错误。
两种修复方案,你可以选适合自己的:
方案1:升级XAMPP的MySQL版本
- 最简单的方式是直接下载最新版的XAMPP,它自带的MySQL版本肯定支持JSON类型。注意升级前一定要备份好现有的数据库文件(XAMPP里的
mysql/data目录),避免数据丢失。 - 如果不想全量升级XAMPP,也可以单独更新其中的MySQL组件,但操作相对繁琐,新手更推荐直接更新整个XAMPP。
方案2:不升级,用其他字段类型替代JSON
如果暂时不想升级,可以用TEXT或LONGTEXT类型来存储JSON格式的字符串,虽然没有JSON类型的原生查询函数支持,但可以在PHP层面处理编码解码:
修改后的建表语句如下:
CREATE TABLE security_user ( id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, roles TEXT NOT NULL, password VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_52825A88E7927C74 (email), PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;
- 存数据时:用PHP的
json_encode()把角色数组转换成字符串再存入roles字段; - 取数据时:用
json_decode()把取出的字符串转回数组或对象,就能正常使用了。
怎么确认自己的MySQL版本?
可以在PHP里执行这段代码查看:
$conn = mysqli_connect('localhost', 'root', '你的数据库密码'); echo mysqli_get_server_info($conn);
或者打开XAMPP的phpMyAdmin,首页就能看到当前MySQL的版本号,确认是不是低于5.7.8。
内容的提问来源于stack exchange,提问作者triker




