2012-12-28 21 views
0

我想在MySQL表中保存一个json字符串。 json字符串来自画布(使用fabricjs)。在MySQL表中保存JSON字符串(从画布)

var jsonCanvas = JSON.stringify(canvas.toDatalessObject()); 

我的第一个问题是,什么是在MySQL中保存json字符串的最佳数据类型?画布将包含图像以及文本和其他对象。 您认为MEDIUMTEXT是否够用?

另一个问题。 是否可以使用此准备好的语句保存json字符串。我怀疑使用关键字“s”作为字符串。

try { 
    $sql = "insert into layout (lt_author, lt_date, lt_category, lt_json_string) 
    values (?,?,?,?)"; 
    $stmt = $mysqli->prepare($sql); 
    $stmt->bind_param("ssss",$lt_author, $lt_date, $lt_category, $lt_json_string); 
    $stmt->execute(); 
    $stmt->close(); 

谢谢你的帮助:) 问候最大

+0

JSON对象将包含实际的二进制图像数据?或图片所在的网址。如果前者在将二进制数据转换为字符串时需要谨慎。 – Perception

回答

0

我假设你的SQL是正确的。
我总是选择TEXT来存储我的画布的json字符串表示。
但是在选择如何保存JSON表示之前,有一些事情需要考虑。
请参阅此处的讨论:Loading JSON in canvas with fabric.js
它解释了您需要遵守的要点。

  • 使用.toDatalessObject()代替.toJson()方法:
  • - 优点:由于kangax在讨论中解释说,toDatalessObject只会保存您的SVG的网址来源,所以,要保存在数据库中的数据量。通过这种方式,您可以使用其他类型来存储您的json画布表示(也许您可以使用 TINYTEXT类型)
    - 缺点:您需要在服务器中有文件,因为在再次加载画布时会引用它。

  • 您的画布中有多少物体?这是什么类型的对象?是更多的SVG或图像和文字?
  • 您需要知道,因为如果您使用 .toDatalessJson()方法,并且您将在画布中加载更多svg,则此svg将转换为 PathPathGroup对象,并将保存在您的数据库中。
    所以,如果你的画布中有很多很多的svg,也许最终的json字符串可能会溢出数据库中 TEXT类型允许的大小(如果发生这种情况,有一些解决方案,比如分割json字符串表示并保存为两个或数据库中有更多条目)。
    但是,如果这种情况经常发生,也许会更好地选择其他类型,如 MEDIUMTEXT,正如您所建议的那样。