【问题标题】:How to save UTF-8 data in MySQL database in Livecode app如何在 Livecode 应用程序的 MySQL 数据库中保存 UTF-8 数据
【发布时间】:2016-07-07 10:38:03
【问题描述】:

我正在尝试保存从 MySQL 数据库中的字段收集的一些数据。文本包含一些波兰语字符,但 Livecode 将所有波兰语字符发送为“?”。这是我的部分代码:

  1. 声明变量

    将字段“Title”的unicodeText放入tTitle 将 uniEncode(tTitle, "UTF8") 放入 tTitle

  2. 将此发送到数据库:

    将 "UPDATE magazyn SET NAZWA='" & tTitle & "'" 放入 tSQLStatement revExecuteSQL gConnectionID,tSQLStatement, "SET NAMES 'utf8'"

例如,单词“łąka”保存为“??ka”。我试过 uniEncode,uniDecode,一切都出错了。

【问题讨论】:

    标签: mysql utf-8 send livecode


    【解决方案1】:

    请勿使用任何编码器/解码器。它们只会增加混乱。

    在尝试使用 utf8/utf8mb4 时,如果您看到 问号(常规问号,而不是黑色菱形),

    • 要存储的字节未编码为 utf8。解决这个问题。 (摆脱编码器可能会解决它。)
    • 数据库中的列是CHARACTER SET utf8(或utf8mb4)。解决这个问题。
    • 另外,请检查读取期间的连接是否为 utf8。我不知道“Livecode”的细节;查看其文档。如果找不到任何东西,请在连接后执行此 SQL:SET NAMES utf8

    【讨论】:

    • 瑞克,我该如何使用 CHARACTER SET utf8 ?如果您查看我的代码,我会使用 SET NAMES。我必须把它放在与数据库代码的开放连接中吗?
    • 查看表架构(SHOW CREATE TABLE 或等效项);它可能在列定义上说CHARACTER SET ...,或者它可能只在表定义上说。
    【解决方案2】:

    问题解决了!代码如下:

    get the unicodeText of field "Title"
    

    将 unidecode(it,"polish") 放入 tTitle

    它会在一个奇怪的版本中保存波兰语字符,但下载我使用这个代码:

    set the unicodetext of fld "List" to uniencode(tList,"polish")
    

    tList 变量包含从 MySQL 收集的所有数据

    【讨论】:

      【解决方案3】:

      确保数据库中的列设置为utf8编码。

      从 LiveCode 7 开始 所有 字段中的文本都是 unicode,特别是 UTF-16。在将文本发送到任何外部文件或数据存储之前,您需要将其编码为 UTF-8(或您想要存储的任何格式。为此使用 LiveCode textEncode() 函数:

      put textEncode(field "Title","utf-8") into tTitle
      put "UPDATE magazine SET nazwa = :1" into tSQLStatement
      revExecuteSQL gConnectionID, tSQLStatement, "tTitle"
      

      注意:使用 :N 变量替换方法来降低 SQL 代码注入攻击的风险也是一个好主意。

      当您从数据库中读取数据时,使用textDecode 转换回 UTF-16:

      put textDecode(tRawDataFromDB,"UTF-16") into old tTitle
      

      【讨论】:

      • 所有列和数据库都是utf8_general_ci。我试过 uniEncode,还是什么都没有:/
      • 抱歉,我的代码出错了。使用已弃用的 textEncode 函数,而不是 uniEncode。我已经编辑了我的代码示例来纠正这个问题。
      猜你喜欢
      • 2012-12-19
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2011-05-06
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多