You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sqlite3执行SQL文件时出现'unclosed ['运行时错误原因排查

问题原因及解决办法

1. 系统Shell的解析冲突

你用sqlite3 nb.db <NB.sql执行时,系统Shell(比如bash)会先扫描SQL文件里的特殊字符,把CHECK约束里的[\s-]当成了文件名匹配的通配符(字符范围语法)。但\s在Shell里不是合法的转义字符,导致Shell无法识别这个方括号范围的结束,直接抛出unclosed '['错误。

2. SQLite命令行默认不支持REGEXP

另外,就算绕开Shell解析问题,标准sqlite3命令行工具默认也没启用REGEXP功能——DB Browser for SQLite是自带了REGEXP扩展的,但原生sqlite3没有,直接执行会报no such function: REGEXP。


解决方法
  • 跳过Shell解析,直接让SQLite读文件:用sqlite3的.read命令执行,这样Shell不会干预文件内容:
    sqlite3 nb.db ".read NB.sql"
    
  • 替换成SQLite原生支持的校验语法:如果不需要REGEXP,用GLOB(SQLite原生支持的匹配语法)改写规则,比如:
    CREATE TABLE IF NOT EXISTS "NB" (
        "phone" TEXT CHECK("phone" GLOB '^(\+[0-9][0-9])?[ -]?*')
    );
    
  • 加载REGEXP扩展(可选):如果必须用REGEXP,启动sqlite3时手动加载对应扩展(不同系统扩展路径不同),比如:
    sqlite3 nb.db -cmd "LOAD EXTENSION '/usr/lib/sqlite3/pcre.so';" <NB.sql
    

内容的提问来源于stack exchange,提问作者Nikulok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:52:47