【问题标题】:How do I quote a UTF-8 String Literal in Sqlite3如何在 Sqlite3 中引用 UTF-8 字符串文字
【发布时间】:2010-08-09 21:23:41
【问题描述】:

我希望在 Sqlite 数据库中编码和存储 Unicode。有没有办法在 sql 查询中对 UTF-8 (unicode) 字符串文字进行原始编码。

我正在寻找类似于 java 的东西,我可以将 \u00E9 扔进一个字符串并让它自动上转换为 Unicode。

【问题讨论】:

  • 您是说在 Java 的自定义应用程序中执行此操作,还是从 SQLite 命令解释器执行此操作?

标签: sqlite unicode utf-8


【解决方案1】:

您使用什么语言? SQLite 可以很好地处理 Unicode,在您的托管语言中创建文字不太明显。

$ sqlite3 junk.sqlite
SQLite version 3.6.22
sqlite> create table names (id integer primary key, name string);
sqlite> insert into names values (null, 
    'î℉ yõù g?ѷЄ ΣϘГくטƏ UTF-8, it stores it');
sqlite> select * from names;
1|î℉ yõù g?ѷЄ ΣϘГくטƏ UTF-8, it stores it

【讨论】:

    【解决方案2】:

    如果您的问题是重新解释 sqlite 中的转义序列,您可以(ab)使用 json_extract 例如。

        UPDATE  `tableToFix`  SET  `columnToFix` = json_extract('"'  ||  `columnToFix`  ||  '"', '$');
        INSERT INTO test VALUE (json_extract('"P\u0159\u00edli\u0161 \u017elu\u0165ou\u010dk\u00fd k\u016f\u0148 \u00fap\u011bl \u010f\u00e1belsk\u00e9 \u00f3dy."', '$'));
    

    注意:报价处理。有效的 json 字符串以 " 开头和结尾,因此您必须在使用 json_extract 之前添加它们

    【讨论】:

      【解决方案3】:

      SQLite 没有转义序列。但你的编程语言可能会。

      # in Python
      db.execute("INSERT INTO MyTable(MyColumn) VALUES('\u00E9')")
      

      db.execute("INSERT INTO MyTable(MyColumn) VALUES(?)", ['\u00E9'])
      

      如果由于某种原因您必须在纯 SQL 中编写 UTF-8 文字,您可以执行以下操作:

      sqlite> SELECT CAST(X'C3A9' AS TEXT);
      é
      

      编辑:由于最初编写了此答案,因此已将 CHAR 函数添加到 SQLite。所以现在,你可以写

      INSERT INTO MyTable(MyColumn) VALUES(CHAR(233))
      

      【讨论】:

        【解决方案4】:

        如果您将数据库配置为使用 UTF-8(我相信这是许多安装的默认设置;请在创建模式时执行PRAGMA encoding="UTF-8"; 确定),这应该不是问题。

        如果你给 SQLite3 发送一组 UTF-8 编码的字符,它应该没有问题。

        如果 Java 能够让您“将 \u0039 转换为字符串”,我会使用它,并确保当您尝试将字符串放入数据库时​​,您已将字符串转换为使用 Java 提供的任何机制的 UTF-8 字节编码。我不相信 SQLite 提供或需要为你提供这个。

        【讨论】:

        • 你为什么要“把 \u0039 扔进一个字符串”?似乎只写“9”会容易得多。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2015-05-15
        • 2014-07-11
        • 2018-01-03
        • 2017-03-04
        • 2015-01-19
        相关资源
        最近更新 更多